如何将多个DataFrame中Pandas列的值合并到一个DataFrame的单列中?
可以使用以下代码来创建数据框:
import pandas as pd
s1 = pd.DataFrame({'item':['apple','apple','apple']},
index=['1/2/2024','1/5/2024','1/6/2024'])
s2 = pd.DataFrame({'item':['orange','orange','orange']},
index=['1/3/2024','1/5/2024','1/7/2024'])
s3 = pd.DataFrame({'item':['banana','banana','banana','banana']},
index=['1/4/2024','1/5/2024','1/6/2024','1/7/2024'])
print(s1)
print(s2)
print(s3)
打印出来的结果是这样的:
item
1/2/2024 apple
1/5/2024 apple
1/6/2024 apple
item
1/3/2024 orange
1/5/2024 orange
1/7/2024 orange
item
1/4/2024 banana
1/5/2024 banana
1/6/2024 banana
1/7/2024 banana
我想根据日期索引,把每个数据框中的项目值(用逗号分隔)合并在一起。
我希望最终的数据框看起来是这样的:
item
1/2/2024 apple
1/3/2024 orange
1/4/2024 banana
1/5/2024 apple,orange,banana
1/6/2024 apple,banana
1/7/2024 orange,banana
这看起来是个简单的问题,但抱歉,我是个新手,只是兼职在学Python,我实在搞不明白。非常感谢你能提供的任何帮助。
3 个回答
0
沿着索引连接数据框:
result = pd.concat([s1, s2, s3], axis=0)
根据索引分组,并把项目聚合成一个用逗号分隔的列表:
result = result.groupby(result.index)['item'].agg(','.join)
创建一个新的数据框,里面包含聚合后的项目:
result_df = pd.DataFrame({'item': result})
2
concat
和 groupby.agg
是用来根据索引进行分组的:
out = pd.concat([s1, s2, s3]).groupby(level=0).agg(','.join)
输出结果:
item
1/2/2024 apple
1/3/2024 orange
1/4/2024 banana
1/5/2024 apple,orange,banana
1/6/2024 apple,banana
1/7/2024 orange,banana
3
你可以把这三个数据框合并在一起,然后根据索引进行分组,最后把每个组中的行连接起来:
df = pd.concat([s1, s2, s3]).groupby(level=0).agg(lambda x: ",".join(x))
item
1/2/2024 apple
1/3/2024 orange
1/4/2024 banana
1/5/2024 apple,orange,banana
1/6/2024 apple,banana
1/7/2024 orange,banana