gpt4 book ai didi

python - 从较大的数据帧创建旋转/融化数据帧的有效方法

转载 作者:行者123 更新时间:2023-12-01 02:06:48 25 4
gpt4 key购买 nike

我有一个数据框,其中有大量列(~36K),其中许多列是某些分类信息的重复。

从这个更大的数据帧中,我想本质上构建一组关系数据帧。

我在下面列出了我希望进行的操作类型。

Master df
ID record_date Site Site1 Site2 Zip Zip1 Zip2
1 12-01-1990 Site0 Site1 Site2 Zip0 Zip1 Zip2
1 12-12-1990 Site0 Site2 N/A Zip0 Zip2 N/A
1 01-15-1991 Site0 Site2 Site3 Zip0 Zip2 Zip3

在上面的示例中,我显示了站点名称和相关的邮政编码。我的数据框有许多这样的列,它们以顺序方式相关,其中根据在 record_date 处于事件状态的“站点”,基础数据可能会发生变化(例如,我已经显示 Site1 已删除 - 变得不活动 - 稍后将被替换)按网站3)

我希望将上述数据框转换为:

Transformed df
ID record_date Site Zip
1 12-01-1990 Site0 Zip0
1 12-01-1990 Site1 Zip1
1 12-01-1990 Site2 Zip2
1 12-12-1990 Site0 Zip0
1 12-12-1990 Site2 Zip2
1 01-15-1991 Site0 Zip0
1 01-15-1991 Site2 Zip2
1 01-15-1991 Site3 Zip3

由于我必须进行大量此类转换,因此效率是关键。我相信我可以使用 pd.melt() 或 pd.pivot_table() 等函数,但我无法达到下面的确切设置。

最佳答案

IIUC wide_to_long

df=df.rename(columns={'Site':'Site0','Zip':'Zip0'})

pd.wide_to_long(df.reset_index(),['Site','Zip'],i='index',j='Drop',sep='').dropna(0).sort_index().reset_index(drop=True)
Out[330]:
ID record_date Site Zip
0 1 12-01-1990 Site0 Zip0
1 1 12-01-1990 Site1 Zip1
2 1 12-01-1990 Site2 Zip2
3 1 12-12-1990 Site0 Zip0
4 1 12-12-1990 Site2 Zip2
5 1 01-15-1991 Site0 Zip0
6 1 01-15-1991 Site2 Zip2
7 1 01-15-1991 Site3 Zip3

关于python - 从较大的数据帧创建旋转/融化数据帧的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48976646/

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