gpt4 book ai didi

python - 使用多列融化/ reshape

转载 作者:行者123 更新时间:2023-12-01 01:39:21 24 4
gpt4 key购买 nike

我以前用过melt来做到这一点,但只有一列。如何在多个柱上进行 reshape 或熔化?我认为它不一定是 reshape 或融化,因为我只是复制一行,然后切换 hv 列中的值。我的想法是使用 df.iterrows() 来做到这一点,但是对于一个大数据集,认为有更好的方法来做到这一点,只是不确定如何做。我正在尝试从:

编辑:...之间有多个列

gid   h     seas    ...    v
1 ATL 2000 ... SF
2 CLE 2000 ... JAC
3 DAL 2000 ... PHI
4 GB 2000 ... NYJ
... ... ... ... ...
7000 GB 2018 ... CHI
... ... ... ... ...

进入此:

gid team    seas    ...    opp_team ...   home_away
1 ATL 2000 ... SF ... Home
1 SF 2000 ... ATL ... Away
2 CLE 2000 ... JAC ... Home
2 JAC 2000 ... CLE ... Away
3 DAL 2000 ... PHI ... Home
3 PHI 2000 ... DAL ... Away
4 GB 2000 ... NYJ ... Home
4 NYJ 2000 ... GB ... Away
... ... ... ... ... ... ...
... ... ... ... ...

最佳答案

使用difference对于 melt 的参数 id_vars 没有 hv 的所有列:

cols = df.columns.difference(['h','v'])
df = df.melt(id_vars=cols,
value_vars=['h','v'],
var_name='home_away',
value_name='team')

然后按 sort_values 更改排序并通过交换索引值进行选择来在团队之间交换值:

df = df.sort_values('gid').reset_index(drop=True)
idx = [i for y, x in zip(df.index[::2], df.index[1::2]) for i in (x, y)]
#alternative non loop solution
#idx = np.vstack([df.index[1::2], df.index[::2]]).T.ravel()

df['opp_team'] = df.loc[idx, 'team'].values
print (df)
gid seas home_away team opp_team
0 1 2000 h ATL SF
1 1 2000 v SF ATL
2 2 2000 h CLE JAC
3 2 2000 v JAC CLE
4 3 2000 h DAL PHI
5 3 2000 v PHI DAL
6 4 2000 h GB NYJ
7 4 2000 v NYJ GB

关于python - 使用多列融化/ reshape ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056373/

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