gpt4 book ai didi

python - Pivot 将行复制到新列 Pandas

转载 作者:行者123 更新时间:2023-12-04 18:56:39 26 4
gpt4 key购买 nike

我有一个这样的数据框,我正在尝试使用 Pandas 中的 Pivot reshape 我的数据框,这样我可以保留原始行中的一些值,同时将重复的行变成列并重命名它们。有时我有 5 个重复的行

我一直在尝试,但我不明白。

import pandas as pd
df = pd.read_csv("C:dummy")

df = df.pivot(index=["ID"], columns=["Zone","PTC"], values=["Zone","PTC"])

# Rename columns and reset the index.
df.columns = [["PTC{}","Zone{}"],.format(c) for c in df.columns]
df.reset_index(inplace=True)
# Drop duplicates
df.drop(["PTC","Zone"], axis=1, inplace=True)

输入
ID  Agent   OV  Zone Value  PTC
1 10 26 M1 10 100
2 26.5 8 M2 50 95
2 26.5 8 M1 6 5
3 4.5 6 M3 4 40
3 4.5 6 M4 6 60
4 1.2 0.8 M1 8 100
5 2 0.4 M1 6 10
5 2 0.4 M2 41 86
5 2 0.4 M4 2 4

输出
ID  Agent   OV  Zone1   Value1  PTC1    Zone2   Value2  PTC2    Zone3   Value3  PTC3
1 10 26 M_1 10 100 0 0 0 0 0 0
2 26.5 8 M_2 50 95 M_1 6 5 0 0 0
3 4.5 6 M_3 4 40 M_4 6 60 0 0 0
4 1.2 0.8 M_1 8 100 0 0 0 0 0 0
5 2 0.4 M_1 6 10 M_2 41 86 M_4 2 4

最佳答案

您可以使用 cumcount创建帮助键,然后我们执行 unstack多个索引变平(PS:您可以在末尾添加 fillna(0),我没有添加它,因为我认为 Zone 值 0 不正确)

df['New']=df.groupby(['ID','Agent','OV']).cumcount()+1
new_df=df.set_index(['ID','Agent','OV','New']).unstack('New').sort_index(axis=1 , level=1)
new_df.columns=new_df.columns.map('{0[0]}{0[1]}'.format)
new_df
Out[40]:
Zone1 Value1 PTC1 Zone2 Value2 PTC2 Zone3 Value3 PTC3
ID Agent OV
1 10.0 26.0 M1 10.0 100.0 None NaN NaN None NaN NaN
2 26.5 8.0 M2 50.0 95.0 M1 6.0 5.0 None NaN NaN
3 4.5 6.0 M3 4.0 40.0 M4 6.0 60.0 None NaN NaN
4 1.2 0.8 M1 8.0 100.0 None NaN NaN None NaN NaN
5 2.0 0.4 M1 6.0 10.0 M2 41.0 86.0 M4 2.0 4.0

关于python - Pivot 将行复制到新列 Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51025752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com