【发布时间】:2019-05-13 19:08:36
【问题描述】:
我正在尝试根据分组数据框中的两列在 Pandas 数据框中创建一个新列。
具体来说,我正在尝试复制此 R 代码的输出:
library(data.table)
df = data.table(a = 1:6,
b = 7:12,
c = c('q', 'q', 'q', 'q', 'w', 'w')
)
df[, ab_weighted := sum(a)/sum(b), by = "c"]
df[, c('c', 'a', 'b', 'ab_weighted')]
输出:
到目前为止,我在 Python 中尝试了以下操作:
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[7,8,9,10,11,12],
'c':['q', 'q', 'q', 'q', 'w', 'w']
})
df.groupby(['c'])['a', 'b'].apply(lambda x: sum(x['a'])/sum(x['b']))
输出:
当我将上面代码中的 apply 更改为 transform 时,出现错误:
TypeError:需要一个整数
如果我只使用一列,则转换工作正常:
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[7,8,9,10,11,12],
'c':['q', 'q', 'q', 'q', 'w', 'w']
})
df.groupby(['c'])['a', 'b'].transform(lambda x: sum(x))
但显然,这不是同一个答案:
有没有办法在 Pandas 中从我的 data.table 代码中获取结果,而无需生成中间列(因为这样我可以在最后一列上使用 transform?
非常感谢任何帮助:)
【问题讨论】:
标签: python pandas dataframe group-by pandas-groupby