Python 熊猫将不同类型的多行转换为一行,每种类型有多个列
给定以下Python 熊猫将不同类型的多行转换为一行,每种类型有多个列,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,给定以下df Account contract_date type item_id quantity price tax net_amount ABC123 2020-06-17 P 1409 1000 0.355 10 400 ABC123 2020-06-17 S 1409 2000 0.053 15 150 ABC123 2020-06-17 C 1409 500 0.25 5 180 ABC1
df
Account contract_date type item_id quantity price tax net_amount
ABC123 2020-06-17 P 1409 1000 0.355 10 400
ABC123 2020-06-17 S 1409 2000 0.053 15 150
ABC123 2020-06-17 C 1409 500 0.25 5 180
ABC123 2020-06-17 S 1370 5000 0.17 30 900
DEF456 2020-06-18 P 7214 3000 0.1793 20 600
我想将df
,按帐户、合同日期和项目id分组。然后将不同类型的值拆分为不同的列。预期结果如下。我可以用for loop/apply来实现这一点,但我想寻求groupby或pivot或任何向量化/pythonic解决方案的建议。预期结果如下:
Account contract_date item_id quantity_P quantity_S quantity_C price_P price_S price_C tax_P tax_S tax_C net_amount_P net_amount_S net_amount_C
ABC123 2020-06-17 1409 1000 2000 500 0.355 0.053 0.25 10 15 5 400 150 180
ABC123 2020-06-17 1370 0 5000 0 0 0.17 0 0 30 0 0 900 0
DEF456 2020-06-18 7214 3000 0 0 0.1793 0 0 20 0 0 600 0 0
*虽然它看起来有点不适合对齐,但您可以复制df
并使用df=pd.read_clipboard()
读取表格。谢谢你的帮助。多谢各位
编辑:我使用df.pivot(索引=['Account','contract\u date','item\u id',columns=['type'])得到的错误。
已解决:错误源于pandas的版本,它是pandas 1.0.1,正如@MayankPorwal所建议的,升级到1.1.x后,它现在工作正常
谢谢。使用:
我的熊猫版本是
1.1.0
。你能试着升级到那个版本吗?@MayankPorwal嗨,升级熊猫版本后,它现在可以正常工作了。谢谢,太好了!!很乐意帮忙。
In [1660]: df.pivot(index=['Account', 'contract_date', 'item_id'], columns=['type'])
Out[1660]:
quantity price tax net_amount
type C P S C P S C P S C P S
Account contract_date item_id
ABC123 2020-06-17 1370 NaN NaN 5000.0 NaN NaN 0.170 NaN NaN 30.0 NaN NaN 900.0
1409 500.0 1000.0 2000.0 0.25 0.3550 0.053 5.0 10.0 15.0 180.0 400.0 150.0
DEF456 2020-06-18 7214 NaN 3000.0 NaN NaN 0.1793 NaN NaN 20.0 NaN NaN 600.0 NaN