我正在尝试折叠数据帧中的行,该数据帧包含一列ID数据和许多包含不同字符串的列。看起来groupby是解决方案,但它似乎倾向于在组上执行一些数字功能-我只想保留文本。这就是我所拥有的...
我有一个形式的数据框:
index ID apples pears oranges
0 101 oranges
1 134 apples
2 576 pears
3 837 apples
4 576 oranges
5 134 pears
这些列是干净的:apples列将永远只在其中包含文本“apples”,否则它将为空白”。
在同一个ID下有多个条目的情况下(在此示例中,在ID 134和576上),我想将这些行折叠起来以得到以下信息:
index ID apples pears oranges
0 101 oranges
1 134 apples pears
2 576 pears oranges
3 837 apples
我可以通过遍历行来做到这一点,但这似乎是非 Pandas 解决方案。有没有更好的办法?
最佳答案
您可以将 groupby
与聚合''.join
,sum
或max
结合使用:
#if blank values are NaN first replace to ''
df = df.fillna('')
df = df.groupby('ID').agg(''.join)
print (df)
apples pears oranges
ID
101 oranges
134 apples pears
576 pears oranges
837 apples
也可以:
df = df.fillna('')
df = df.groupby('ID').sum()
#alternatively max
#df = df.groupby('ID').max()
print (df)
apples pears oranges
ID
101 oranges
134 apples pears
576 pears oranges
837 apples
另外,如果需要删除每个组和每个列的重复项,请添加
unique
:df = df.groupby('ID').agg(lambda x: ''.join(x.unique()))
关于python-3.x - 折叠 Pandas 数据框中的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43514019/