查找熊猫中按值关联的行之间的差异

时间:2020-07-13 23:54:49

标签: python pandas dataframe

我需要一些帮助来弄清楚如何在同一数据帧内将一列的值添加到其他列。

例如,我有随机生成的数据的df:

df = pd.DataFrame({'user_id': [123, 123, 246, 246, 135, 135],
                   'period': [1, 2, 1, 2, 1, 2],
                   'value1': [0, 5, 3, 1, 6, 3],
                   'value2': [5, 5, 2, 5, 4, 7],
                   'value3': [10, 15, 35, 25, 60, 50]})


   | user_id |period| value1 | value2 | value3 |
   |---------|------|--------|--------|--------|
0  |  123    |   1  |   0    |   5    |   10   |
1  |  123    |   2  |   5    |   5    |   15   |
2  |  246    |   1  |   3    |   2    |   35   |
3  |  246    |   2  |   1    |   5    |   25   |
4  |  135    |   1  |   6    |   4    |   60   |
5  |  135    |   2  |   3    |   7    |   50   |

因此在上面的df中,我将从列“值3”中获取值,并将其添加到“值1”和“值2”中的值,同时保留其他列。

df2

   | user_id |period| value1 | value2 | value3 |
   |---------|------|--------|--------|--------|
0  |  123    |   1  |   10   |   15   |   10   |
1  |  123    |   2  |   20   |   20   |   15   |
2  |  246    |   1  |   38   |   37   |   35   |
3  |  246    |   2  |   26   |   30   |   25   |
4  |  135    |   1  |   66   |   64   |   60   |
5  |  135    |   2  |   53   |   57   |   50   |

我尝试对实际添加内容进行硬编码,但遇到错误代码。

我知道我可能缺少一些简单的东西。有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

在向数据框添加序列时指定axis=0

cols = ['value1', 'value2']
df[cols] = df[cols].add(df['value3'], axis=0)

   user_id  period  value1  value2  value3
0      123       1      10      15      10
1      123       2      20      20      15
2      246       1      38      37      35
3      246       2      26      30      25
4      135       1      66      64      60
5      135       2      53      57      50

答案 1 :(得分:1)

我们可以进行numpy传播

df.update(df[['value1','value2']]+df.value3.values[:,None])
df
   user_id  period  value1  value2  value3
0      123       1      10      15      10
1      123       2      20      20      15
2      246       1      38      37      35
3      246       2      26      30      25
4      135       1      66      64      60
5      135       2      53      57      50