如何计算行与另一个特定行之间的差异?

时间:2019-08-13 13:35:33

标签: python pandas

我有一个数据框

full_name  x
q          1.5
q_1        1.3
q_2        1.2
q_3        1.3
r          1.5
r_1        1.3
r_2        1.2
r_3        1.3

并且我想创建一个新列,该列是后缀全名与其基数之间的区别,例如:

full_name  x    x_diff
q          1.5  0
q_1        1.3  -0.2
q_2        1.2  -0.3
q_3        1.3  -0.2
r          1.5  0
r_1        1.3  -0.2
r_2        1.2  -0.3
r_3        1.3  -0.2

因此,q-qq_1-qq_2-qq_3-{{1 }},与q相同。

我已经尝试过类似r之类的方法,但这不起作用。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

SeriesDataFrame.set_index匹配的main_name创建full_name,然后减去Series.map ed main_name

s =  df.loc[df.main_name == df.full_name].set_index('main_name')['x']

df['x_diff'] = df.x - df.main_name.map(s)
print (df)
  full_name main_name    x  x_diff
0         q         q  1.5     0.0
1       q_1         q  1.3    -0.2
2       q_2         q  1.2    -0.3
3       q_3         q  1.3    -0.2
4         r         r  1.5     0.0
5       r_1         r  1.3    -0.2
6       r_2         r  1.2    -0.3
7       r_3         r  1.3    -0.2

如果始终main_name中每个组的第一个值等于full_name,则将GroupBy.first创建的SeriesGroupBy.transform相减:

df['x_diff'] = df.x - df.groupby('main_name')['x'].transform('first')

答案 1 :(得分:0)

您可以通过3个步骤进行操作:

  1. 分组依据main_name
  2. 对于每个组:创建一个包含先前值的新列(例如x_shifted)。为此,您可以使用df.shift(1)https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shift.html
  3. 对于每个组:创建x_diffx_shifted之间的区别的列x