我有一个像这样的熊猫数据框:
id value
1 25
2 40
3 30
理想情况下我想将其转换为:
id value value_2 value_3
1 25 40 30
2 40 25 30
3 30 25 40
上述对话背后的逻辑是添加 2 个额外的列,其中包含其他 id 的值。
在第一行(id=1)中,value_2 = id=2 的值,value_3 = id=3 的值。
在第二行(id=2)中,value_2 = id=1 的值,value_3 = id=3 的值
在第3行(id=3)中,value_2=id=1的值,value_3=id=2的值
是否有一种解决方案允许我一次更新所有行,而不必迭代每一行,获取值,然后更新其他行的数据帧(一次一行)。或者说应对上述挑战最简单的解决方案是什么?
IUUC,您可以执行以下操作:
# create array (repeat of value)
repeats = np.tile(df['value'].values, (len(df), 1))
# remove elements from the diagonal
m = repeats.shape[0]
data = repeats[~np.eye(len(df), dtype=bool)].reshape(m, -1)
# create new DataFrame
df2 = pd.DataFrame(data=data[:, :], columns='value_' + df['id'].astype(str)[1:])
# concat old and new data
result = pd.concat([df, df2], axis=1)
print(result)
Output
id value value_2 value_3
0 1 25 40 30
1 2 40 25 30
2 3 30 25 40
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)