【问题标题】:pandas dataframe restructuring [duplicate]熊猫数据框重组[重复]
【发布时间】:2019-04-20 09:36:22
【问题描述】:

我有一个这样的数据框:

输入:

df = pd.DataFrame({'a': range(3), 'b': np.arange(3)-1})

期望的输出:

df_rearranged = pd.DataFrame({'data': [0,1,2,-1,0,1], 'origin': ['a', 'a', 'a', 'b', 'b', 'b']})

我找到了一种(hacky)方法:

尝试:

subset_1 = df[['a']]
subset_1['origin'] = 'a'
subset_1.rename(columns={'a':'data'}, inplace=True)

subset_2 = df[['b']]
subset_2['origin'] = 'b'
subset_2.rename(columns={'b':'data'}, inplace=True)

df_rearranged = subset_1.append(subset_2)

这行得通,但是当我想合并大量列时,它很快就变得不切实际了。另外,我觉得pandas中应该有一个默认的功能,但是我缺少找到它的关键字。非常感谢您的帮助!

【问题讨论】:

  • 你想融化,df.melt()

标签: python pandas


【解决方案1】:

DataFrame.meltDataFrame.reindex 的变更单列一起使用:

df1 = df.melt(var_name='origin', value_name='data').reindex(['data','origin'], axis=1)
print (df1)
   data origin
0     0      a
1     1      a
2     2      a
3    -1      b
4     0      b
5     1      b

或带有numpy.ravelnumpy.repeat 的DataFrame 构造函数,显然具有更好的性能:

df1 = pd.DataFrame({'data':df.values.ravel(), 'origin':np.repeat(df.columns, len(df))})
print (df1)
   data origin
0     0      a
1    -1      a
2     1      a
3     0      b
4     2      b
5     1      b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多