【问题标题】:How to reshape this dataframe如何重塑此数据框
【发布时间】:2016-05-09 14:32:54
【问题描述】:

我需要像这样重塑数据框:

  nam  code date1 date2
0   a     1   1/1   1/2
1   b     3   3/4   4/5

df.stack 在这种情况下似乎毫无用处。

期望的输出:

  nam  code date
0   a     1  1/1
1   a     1  1/2
2   b     3  3/4
3   b     3  4/5

【问题讨论】:

    标签: python pandas reshape


    【解决方案1】:

    您可以按列使用lreshapesort_values namreindex_axis 和最后一个reset_index

    print pd.lreshape(df, {'date': ['date1', 'date2']})
            .sort_values('nam')
            .reindex_axis(['nam','code','date'], axis=1)
            .reset_index(drop=True)
    
      nam  code date
    0   a     1  1/1
    1   a     1  1/2
    2   b     3  3/4
    3   b     3  4/5
    

    使用meltdrop 的另一个解决方案用于删除列variablesort_values 按列nam 和最后一个reset_index

    print pd.melt(df, id_vars=['nam','code'], value_name='date')
            .drop('variable', axis=1)
            .sort_values('nam')
            .reset_index(drop=True)
    
      nam  code date
    0   a     1  1/1
    1   a     1  1/2
    2   b     3  3/4
    3   b     3  4/5
    

    编辑:

    lreshape 现在没有记录,但将来可能会被删除 (with pd.wide_to_long too)。

    可能的解决方案是将所有 3 个功能合并为一个 - 可能是 melt,但现在尚未实施。也许在一些新版本的熊猫中。然后我的答案会更新。

    【讨论】:

    • 我不知道 lreshape。这有记录吗?
    • 试试spyderhelp (pd.lreshape),但还没有很好的文档记录。
    • 当然比重塑 numpy 数组并返回数据框要好。很高兴知道。谢谢。 :)
    • 每个文档字符串(使用??):def lreshape(data, groups, dropna=True, label=None): """ Reshape long-format data to wide. Generalized inverse of DataFrame.pivot
    • @Ivon Ding - 如果我的回答有帮助,请不要忘记accept。谢谢。
    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2015-10-07
    相关资源
    最近更新 更多