熊猫:将多行数据添加到单行的额外列中

时间:2019-11-17 19:16:52

标签: python pandas

我有一个这样的熊猫数据框:

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的值

有没有一种解决方案,允许我一次更新所有行,而不必遍历每一行,获取值,然后更新其他行的数据帧(一次更新一行)。还是上述挑战最简单的解决方案是什么?

1 个答案:

答案 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