【发布时间】:2022-01-25 23:19:34
【问题描述】:
我有以下玩具 DataFrame,名为 df:
df = pd.DataFrame({'foo' : ['red', 'red', 'red', 'blue', 'blue', 'blue', 'green', 'green', 'green'],
'bar' : [10, -5, 7, 14, 20, 3, 40, -100, 75]})
foo bar
red 10
red -5
red 7
blue 14
blue -20
blue 3
green 40
green -100
green 75
我想使用foo 列的groupby() 对bar 列的绝对值求和。这是我的尝试:
df['baz'] = df.groupby('foo').bar.apply(lambda x: x.abs().sum())
我希望看到以下内容:
foo bar baz
red 10 22
red -5 22
red 7 22
blue 14 37
blue -20 37
blue 3 37
green 40 215
green -100 215
green 75 215
不幸的是,我在新创建的baz 列中获得了NaN。
为什么这种方法会产生NaN 值?另外(尽管我的代码中有错误),是否有更优雅(即更 Pythonic)的方式来做到这一点?
【问题讨论】:
-
目前无法测试;
df['baz'] = df.groupby('bar').abs().sum().reset_index()。可能是一厢情愿
标签: python pandas pandas-groupby