我有一个这样的熊猫数据框:
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
上述对话的逻辑是,添加了另外两个包含其他ID值的列。
在第一行(id = 1)中,value_2 = id = 2的值,value_3 = id = 3的值。
在第二行(id = 2)中,value_2 = id = 1的值,value_3 = id = 3的值
在第三行(id = 3)中,value_2 = id = 1的值,value_3 = id = 2的值
有没有一种解决方案,允许我一次更新所有行,而不必遍历每一行,获取值,然后更新其他行的数据帧(一次更新一行)。还是上述挑战最简单的解决方案是什么?
答案 0 :(得分:1)
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)
输出
id value value_2 value_3
0 1 25 40 30
1 2 40 25 30
2 3 30 25 40