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.melt
和concat
:
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 列的主要内容,如果未能解决你的问题,请参考以下文章