Python Pandas:通过重复项将列组合在一起,并在相应列中连接字符串

Posted

技术标签:

【中文标题】Python Pandas:通过重复项将列组合在一起,并在相应列中连接字符串【英文标题】:Python Pandas: Group a column together by duplicates and join strings within a corresponding column 【发布时间】:2021-12-01 09:20:51 【问题描述】:

我正在寻找对 PO Header Id 进行分组或(groupby),然后为 PO Header ID 相同的所有行连接字符串 (XML)。我偶然发现了一些代码示例,但遇到了一些错误。

最终,Final_XML 列是我想要实现的目标。

PO Header ID   XML   Combined_XML
123           <test1> 
123           <test2> 
456           <test3> 
567           <test4> 
567           <test5> 
567           <test6> 

Desired output
PO Header ID   Combined_XML
123            <test1><test2>
456            <test3>
567            <test4><test5><test6>

这是我迄今为止尝试过的:

    combineXML = df.groupby(['PO Header Id']).agg(['Combined_XML']).apply(list).reset_index()
    print(combineXML)
    Throws error: KeyError: 'PO Header Id' There are no spaces in the column name so I am not sure 
    why it is not working
    df = df.groupby(['PO Header Id','XML'])['Combined_XML'].apply(''.join).reset_index()

【问题讨论】:

让我知道我的答案是否适合您,或者需要任何微调?谢谢! 嗨,斯科特,请反馈我的答案是否适合您,或者需要任何微调?谢谢! 【参考方案1】:

您可以将.GroupBy.agg() 与named aggregation 一起使用,如下所示:

combineXML = df.groupby('PO Header ID', as_index=False).agg(Combined_XML=('XML', ''.join))

如果您的列名实际上是PO Header Id,则使用以下内容:

combineXML = df.groupby('PO Header Id', as_index=False).agg(Combined_XML=('XML', ''.join))

结果:

print(combineXML)


   PO Header ID           Combined_XML
0           123         <test1><test2>
1           456                <test3>
2           567  <test4><test5><test6>

【讨论】:

【参考方案2】:

你可以这样试试 df.groupby(['PO Header ID'])['XML'].apply(''.join).reset_index()

【讨论】:

文件 ".\Prepare-Data.py",第 58 行,在 groupPOsAndMergeXML combineXML = df.groupby(['PO Header ID'])['XML'].apply(''.join ).reset_index() 文件“C:\Program Files\Python37\lib\site-packages\pandas\core\frame.py”,第 7636 行,在 groupby dropna=dropna,文件“C:\Program Files\Python37\lib \site-packages\pandas\core\groupby\groupby.py",第 896 行,在 init 中 dropna=self.dropna,文件 "C:\Program Files\Python37\lib\site-packages\ pandas\core\groupby\grouper.py",第 860 行,在 get_grouper 中引发 KeyError(gpr) KeyError: 'PO Header ID' @Scott 似乎错误是由于您作为示例数据发布的列标签实际上是 'PO Header Id' 而不是 'PO Header ID'Id 而不是 ID)。修复此问题后,此解决方案应该可以工作,除了列标签不是 Combined_XML 与您预期的结果一样。如果您想要确切的列标签,请参阅我的答案。

以上是关于Python Pandas:通过重复项将列组合在一起,并在相应列中连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:将列中的列表拆分为多行[重复]

合并 Pandas 列中的列表,其中列名在列表中

通过对应的字典值组合 Pandas 列

Python pandas:使用方法链接将列添加到分组的 DataFrame

Python/Pandas/Datetime:将列中的整个列表转换为日期时间

python 将列转换为pandas to_datetime()