根据列中的值组合Panda中的两行,并创建一个新类别



我最感兴趣的是如何以一种优秀的熊猫方式来完成这项工作。

在该示例中,来自Osaka的数据Tim具有两个fruit

import pandas as pd
data = {'name': ['Susan', 'Tim', 'Tim', 'Anna'],
'fruit': ['Apple', 'Apple', 'Banana', 'Banana'],
'town': ['Berlin', 'Osaka', 'Osaka', 'Singabpur']}
df = pd.DataFrame(data)
print(df)

结果

name   fruit       town
0  Susan   Apple     Berlin
1    Tim   Apple      Osaka
2    Tim  Banana      Osaka
3   Anna  Banana  Singabpur

我调查了数据,发现其中一个人有多种水果。我想创建一个新的";类别";因为它被命名为CCD_ 4(或其他什么(。关键是Tim的其他字段的值相等。

df.groupby(['name', 'town', 'fruit']).size()

我不确定这是否是探索这个数据集的正确方法。背后的逻辑问题是,一些人+镇的组合是否有多种果实。

因此,我想要这个

name   fruit             town
0  Susan   Apple             Berlin
1    Tim   Apple&Banana      Osaka
2   Anna   Banana            Singabpur

使用groupby agg:

new_df = (
df.groupby(['name', 'town'], as_index=False, sort=False)
.agg(fruit=('fruit', '&'.join))
)

new_df:

name       town         fruit
0  Susan     Berlin         Apple
1    Tim      Osaka  Apple&Banana
2   Anna  Singabpur        Banana
>>> df.groupby(["name", "town"], sort=False)["fruit"]
.apply(lambda f: "&".join(f)).reset_index()
name       town         fruit
0   Anna  Singabpur        Banana
1  Susan     Berlin         Apple
2    Tim      Osaka  Apple&Banana

最新更新