python lambda根据现有列增加值

我有两列字母和值,新列应该具有基于“字母”列的递增值,如下所示:


import pandas as pd


df = pd.DataFrame(data=[['a', 'one'],

                        ['a', 'two'],

                        ['b', 'three'],

                        ['b', 'four'],

                        ['c', 'five'],

                        ['c', 'five'],

                        ['c', 'five']

                        ],

                  columns=['Letter', 'value'])



#df['counter'] = df['value'].shift().where(df['Letter'].shift() == df['Letter'], '')


print(df)


df['counter'] = df.apply(lambda x: x+1 if df['Letter'].shift() == df['Letter'] else 1, axis=1)


#print(df)

'''

Expected output

  Letter  value  counter

0      a    one   p1

1      a    two   p2

2      b  three   p1

3      b   four   p2

4      c   five   p1

5      c   five   p2

6      c   five   p3

'''

你能帮我修复上面的代码吗?谢谢。


更准确地编辑我的问题,我需要稍后将行转换为列(我让该代码使用数据透视函数工作)


跃然一笑
浏览 134回答 1
1回答

三国纷争

在 pandas 中肯定有一种更优雅的方法可以做到这一点,但我忘记了函数的名称:# Create a constant, valued-at-one column for summing each row>>> df['counter'] = df.assign(ind=1).groupby('Letter')['ind'].cumsum()>>> df  Letter  value  counter0      a    one        11      a    two        22      b  three        13      b   four        24      c   five        15      c   five        26      c   five        3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python