Python Pandas Dataframe 根据重复添加额外的列
Python Pandas Dataframe adding extra column based on duplicates
今天我一直致力于合并和编辑数据框,但一直被一个非常具体的部分所困。我有一列包含某些水果的名称,然后是这样的人的名称:
Fruit
Person
Banana
Jake
Banana
Paul
Carrot
Nancy
Carrot
Sydney
Carrot
Jane
请注意,“人员”列始终是唯一的。我的目标是在第三或第四列中获得类似这样的内容:
Fruit
Person1
Person2
Person3
Banana
Jake
Paul
Carrot
Nancy
Sydney
Jane
我试过这个:
first = df.drop_duplicates(subset=['Zone','District','Area'],keep='First',inplace = True)
second = df.drop_duplicates(subset=['Zone','District','Area'],keep='Last',inplace = True)
稍后将它们合并在一起,但这不会得到中间的那些,例如我的示例中的“Syndey”。我找到了这个:
但是我不太理解groupby
部分。我希望这对您有所帮助,感谢您的时间和耐心。
使用df.groupby
、Groupby.agg
和pd.concat
:
In [890]: df1 = df.groupby('Fruit').agg(list).reset_index()
In [905]: res = pd.concat([df1.Fruit, pd.DataFrame(df1.Person.tolist(), index=df1.index)], 1)
In [906]: res
Out[906]:
Fruit 0 1 2
0 Banana Jake Paul None
1 Carrot Nancy Sydney Jane
df = df.assign(_=lambda x: 'Person'+(x.groupby('Fruit').transform(
'cumcount')+1).astype(str)).pivot(columns='_', index='Fruit')
print(df)
结果:
Person
_ Person1 Person2 Person3
Fruit
Banana Jake Paul NaN
Carrot Nancy Sydney Jane
今天我一直致力于合并和编辑数据框,但一直被一个非常具体的部分所困。我有一列包含某些水果的名称,然后是这样的人的名称:
Fruit | Person |
---|---|
Banana | Jake |
Banana | Paul |
Carrot | Nancy |
Carrot | Sydney |
Carrot | Jane |
请注意,“人员”列始终是唯一的。我的目标是在第三或第四列中获得类似这样的内容:
Fruit | Person1 | Person2 | Person3 |
---|---|---|---|
Banana | Jake | Paul | |
Carrot | Nancy | Sydney | Jane |
我试过这个:
first = df.drop_duplicates(subset=['Zone','District','Area'],keep='First',inplace = True)
second = df.drop_duplicates(subset=['Zone','District','Area'],keep='Last',inplace = True)
稍后将它们合并在一起,但这不会得到中间的那些,例如我的示例中的“Syndey”。我找到了这个:
但是我不太理解groupby
部分。我希望这对您有所帮助,感谢您的时间和耐心。
使用df.groupby
、Groupby.agg
和pd.concat
:
In [890]: df1 = df.groupby('Fruit').agg(list).reset_index()
In [905]: res = pd.concat([df1.Fruit, pd.DataFrame(df1.Person.tolist(), index=df1.index)], 1)
In [906]: res
Out[906]:
Fruit 0 1 2
0 Banana Jake Paul None
1 Carrot Nancy Sydney Jane
df = df.assign(_=lambda x: 'Person'+(x.groupby('Fruit').transform(
'cumcount')+1).astype(str)).pivot(columns='_', index='Fruit')
print(df)
结果:
Person
_ Person1 Person2 Person3
Fruit
Banana Jake Paul NaN
Carrot Nancy Sydney Jane