我正在尝试折叠数据帧中的行,该数据帧包含一列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 与聚合''.joinsummax结合使用:

#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/

10-12 18:02
查看更多