我有一个pandas数据帧,我想对一列执行groupby,并对另一列应用自定义函数。但该函数必须应用于apply列的每两个条目。你知道吗
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 series object)上使用索引访问的方法。你知道吗
请指导我如何做到这一点,谢谢在Adv。你知道吗
所以我尝试了下面的方法。你知道吗
Myfunc用于查找两个字符串之间的字符串相似性,为此我使用了非常棒的fuzzyfuzzy库
但我不确定这是否是Python的方式做这样的事。请告诉我,如果有更多的Python的方式来做这件事。谢谢。你知道吗
我提议用另一种方式来完成你的任务。你知道吗
从使用前一行的
vals
生成列开始 在当前组中。我把它命名为prev
。你知道吗然后使用
apply
对df
中的每一行调用函数,替换 结果dores
列。myfunc
获取当前行,必须提取prev
和vals
,然后返回结果。你知道吗剩下的事情就是删除
prev
列。你知道吗所以整个脚本可以如下所示:
当您
print(df)
时,您将得到:IIUC,你可以试试下面的
编辑稍微修改代码以匹配输出:
相关问题 更多 >
编程相关推荐