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] 举报,一经查实,本站将立刻删除。