如何将多个数据帧中 Pandas 列的值合并到一个数据帧中的一列中?

问题描述 投票:0回答:2

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

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的新手,我只是想不通。非常感谢您提供的任何帮助。

python pandas dataframe time-series series
2个回答
1
投票

您可以连接所有三个数据帧,按索引分组,然后连接每组中的行:

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

1
投票
索引上的

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
© www.soinside.com 2019 - 2024. All rights reserved.