微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Pandas中的困难数据帧重塑

如果我有一个如下所示的数据框:

         DATE1    DATE2   DATE3   AMOUNT1   AMOUNT2   AMOUNT3

1        1/1/15   5/22/14 7/12/13    5        6         3
..         ..       ..       ..      ..       ..        ..

我希望得到它的形式:

    DATE  AMOUNT
1  1/1/15   5
2  5/22/14  6
3  7/12/13  3
..   ..     ..

执行此操作的最有效代码是什么?由于列名称(DATE1,DATE2等)的不同,我可以通过电话熔化或分组工作.将“1”列,“2”列和“3”列子集化为较小的数据帧,重命名列和连接是最好的事情吗?或者有一种更好的方法可以做到我错过了吗?

谢谢.

解决方法:

你可以使用pd.lreshape:

import pandas as pd

df = pd.DataFrame([['1/1/15', '5/22/14', '7/12/13', 5, 6, 3]], 
                  columns=['DATE1', 'DATE2', 'DATE3', 'AMOUNT1', 'AMOUNT2', 'AMOUNT3'])

result = pd.lreshape(df, {'AMOUNT': ['AMOUNT1', 'AMOUNT2', 'AMOUNT3'],
                          'DATE': ['DATE1', 'DATE2', 'DATE3']})
print(result)

产量

      DATE  AMOUNT
0   1/1/15       5
1  5/22/14       6
2  7/12/13       3

pd.lreshape的第二个参数是键/值对的字典.每把钥匙都是
所需列的名称,每个值都是来自df的列的列表
你希望合并成一列.

有关pd.lreshape的更多信息,请参阅docstring,help(pd.lreshape).

或者,您可以使用pd.melt将所有列合并为一列,并使用str.extract将文本部分与列名称的数字部分分开.然后使用pivot获得所需的结果:

result = pd.melt(df)
result[['variable', 'num']] = result['variable'].str.extract('(\D+)(\d+)', expand=True)
result = result.pivot(index='num', columns='variable', values='value')
print(result)

产量

variable AMOUNT     DATE
num                     
1             5   1/1/15
2             6  5/22/14
3             3  7/12/13

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐