【发布时间】:2019-06-26 21:04:18
【问题描述】:
我有一个 pandas 数据框,我想对一列执行 groupby 并将自定义函数应用于另一列。但该函数必须应用于 apply-column 的每两个条目。
df = pd.DataFrame({'id':[1,1,2,2,2,3,3,3,3,3], 'vals':['ANZ', 'ABC', 'SAT', 'SATYA', 'SQL', 'WER', 'DEA', 'KIP', 'FTY', 'TCZ'] })
#df
id vals
1 ANZ
1 ABC
2 SAT
2 SATYA
2 SQL
3 WER
3 DEA
3 KIP
3 FTY
3 TCZ
# i need a column "res", as a func applied to column vals's each two rows on a group by on column 'id'. ### myfunc takes two argument and return one value.
df['res'] = df.groupby('id')['vals'].apply(myfunc)
###df
id vals res
1 ANZ myfunc(None, ANZ)
1 ABC myfunc('ANZ', 'ABC')
2 SAT myfunc(None, 'SAT')
2 SATYA myfunc('SAT', 'SATYA')
2 SQL myfunc('SATYA', 'SQL')
3 WER myfunc(None, 'WER')
3 DEA myfunc('WER', 'DEA')
3 KIP myfunc('DEA', 'KIP')
3 FTY myfunc('KIP', 'FTY')
3 TCZ myfunc('FTY', 'TCZ')
但目前无法形成 apply() 的表达式,作为一个 group by .apply(x),x 将是一个系列,我无法找到一种方法在 x(pandas groupby 系列上使用索引访问对象)。
请指导我如何实现这一点,谢谢 Adv.
【问题讨论】:
-
我对代码做了一点修改,请大家看看,谢谢。