Pandas:合并具有相同列名的 pandas 列

Posted

技术标签:

【中文标题】Pandas:合并具有相同列名的 pandas 列【英文标题】:Pandas: Combine pandas columns that have the same column name 【发布时间】:2021-02-24 08:30:54 【问题描述】:

如果我们有以下df,

df

    A   A   B   B   B
0  10   2   0   3   3
1  20   4  19  21  36
2  30  20  24  24  12
3  40  10  39  23  46

如何合并具有相同名称的列的内容? 例如

    A   B  
0  10   0   
1  20  19  
2  30  24
3  40  39
4  2   3
5  4   21
6  20  24
7  10  23
8  Na  3
9  Na  36
10 Na  12
11 Na  46

我试过groupby 和merge 都没有做这项工作。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

如果列名重复,您可以使用DataFrame.meltconcat

df = pd.concat([df['A'].melt()['value'], df['B'].melt()['value']], axis=1, keys=['A','B'])
print (df)
       A   B
0   10.0   0
1   20.0  19
2   30.0  24
3   40.0  39
4    2.0   3
5    4.0  21
6   20.0  24
7   10.0  23
8    NaN   3
9    NaN  36
10   NaN  12
11   NaN  46

编辑:

uniq = df.columns.unique()
df = pd.concat([df[c].melt()['value'] for c in uniq], axis=1, keys=uniq)
print (df)
       A   B
0   10.0   0
1   20.0  19
2   30.0  24
3   40.0  39
4    2.0   3
5    4.0  21
6   20.0  24
7   10.0  23
8    NaN   3
9    NaN  36
10   NaN  12
11   NaN  46

【讨论】:

非常感谢@jezrael。我从未听说过.melt。如果我想自动化这个过程,我应该用 df.columns 上的循环替换“A”和“B”,对吗?

以上是关于Pandas:合并具有相同列名的 pandas 列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 合并具有不同列的两个数据框

在 Pandas 中合并数据框(没有列名)

使用新列名迭代合并 pandas 列

将具有相同列/索引的两个 pandas DataFrame 合并为一个 DataFrame

将具有重叠列名的 Pandas 加入多个数据框?

pandas 列选择因合并 Excel 列中的元组列名而失败