熊猫:将多行中的数据添加到第三列分隔的额外列中

时间:2019-11-18 09:28:04

标签: python pandas

昨天我在如何将多行数据添加到额外的列Pandas: Adding data from multiple rows into extra columns for a single row中获得了一些帮助。那使我受益匪浅,但是我想试试运气并寻求更多帮助。

我拥有的实际数据集由另一列(country_id)组成。对于每一行,我希望将同一country_id中其他行的值添加到value_2和value_3列中。

下面显示了我当前拥有的数据框

country_id   id   value
   1         1    25
   1         2    40
   1         3    30
   2         1    15
   2         2    20
   2         3    10

理想情况下,我想将其转换为此:

country_id  id  value  value_2  value_3
1           1   25     40        30
1           2   40     25        30
1           3   30     25        40
2           1   15     20        10
2           2   20     15        10
2           3   10     15        20
  • 在第一行中:value_2 = country_id的值= 1,id = 1。 value_3 = id的值为3,country_id的值为1。
  • 在第二行:value_2 = id的值= 1,country_id =1。Value_3 = id的值= 3,country_id = 1。
  • 在第三行:value_2 = id = 1的值和country_id = 1,value_3 = id = 2的值并且country_id = 1

第4到第6行遵循相同的逻辑,但针对country_id2。

以前的解决方案(不包括country_id)是这样的:

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)

虽然非常有用,但这仍然意味着我必须遍历每个country_id并同时为一个country_id添加value_2和value_3。我想知道是否有一种方法可以在不依赖循环的情况下生成所有额外的值。

先谢谢了。

0 个答案:

没有答案