【问题标题】:Pandas - Merge columns into one keeping the column namePandas - 将列合并为一个保留列名
【发布时间】:2016-11-01 17:31:44
【问题描述】:

我有一个包含四列的数据框:ID、Phone1、Phone2 和 Phone3。 我想创建一个包含三列的新数据框:ID、Phone、PhoneSource。 如果我像this question 那样进行追加:

df['Column 1'].append(df['Column 2']).reset_index(drop=True)

我得到了我想要的一半:所有电话号码都在同一列中。但是如何保留源代码?

【问题讨论】:

  • 您能否发布原始数据和代码来创建您的 2 个 dfs 以及所需的输出是什么样的以避免歧义
  • 我明白你的观点@EdChum,但我认为我链接的上一个问题提供了一些背景信息。不过我承认我很懒!
  • 好吧,这里的表格是发布重现您的问题和所需结果的代码,链接到相关问题并不一定会告诉我们为什么该问题没有完全解决您的特定示例,因此为什么你应该这样做

标签: python-2.7 pandas


【解决方案1】:

我觉得你可以用melt:

df = pd.DataFrame({'ID':[2,3,4,5],
                   'Phone 1':['A', 'B', 'C', 'D'],
                   'Phone 2':['E', 'F', 'G', 'H'],
                   'Phone 3':['A', 'C', 'G', 'H']})
print (df)
   ID Phone 1 Phone 2 Phone 3
0   2       A       E       A
1   3       B       F       C
2   4       C       G       G
3   5       D       H       H

print (pd.melt(df, id_vars='ID', var_name='PhoneSource', value_name='Phone'))
    ID PhoneSource Phone
0    2     Phone 1     A
1    3     Phone 1     B
2    4     Phone 1     C
3    5     Phone 1     D
4    2     Phone 2     E
5    3     Phone 2     F
6    4     Phone 2     G
7    5     Phone 2     H
8    2     Phone 3     A
9    3     Phone 3     C
10   4     Phone 3     G
11   5     Phone 3     H

stack 的另一个解决方案:

df1 = df.set_index('ID').stack().reset_index()
df1.columns = ['ID','PhoneSource','Phone']
print (df1)
    ID PhoneSource Phone
0    2     Phone 1     A
1    2     Phone 2     E
2    2     Phone 3     A
3    3     Phone 1     B
4    3     Phone 2     F
5    3     Phone 3     C
6    4     Phone 1     C
7    4     Phone 2     G
8    4     Phone 3     G
9    5     Phone 1     D
10   5     Phone 2     H
11   5     Phone 3     H

【讨论】:

  • 非常感谢!我从来没有意识到有一个 melt 函数,我只从 R 中知道它。这太棒了:) 我还会仔细研究堆叠的答案,因为我从来没有使用过它。但目前融化效果很好,太棒了!
  • 知道我是否可以回到单班轮吗?我已将它与另一列合并,现在希望有 3 列用于电话和这个新列。我试过unstack,但它并没有真正起作用。谢谢!
  • 可以查看this solution
  • 哇,太棒了,这对@jezrael 有很大帮助!谢谢
  • 真的!很高兴看到 unstack :)
猜你喜欢
  • 2017-05-10
  • 2015-09-17
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2022-07-21
相关资源
最近更新 更多