如何将多个DataFrame中Pandas列的值合并到一个DataFrame的单列中?

1 投票
3 回答
54 浏览
提问于 2025-04-14 17:54

可以使用以下代码来创建数据框:

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

concatgroupby.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

撰写回答