python - 每组相邻列内的连续差异

标签 python pandas list dataframe

我的文件只有几列。为简单起见,我在下面显示前三组(A1、A2 和 A3):

Column1 Column2 Column3 
A1      45      50      
A1      70      90      
A1      100     150
A2      500     510     
A2      550     600
A3      1000    1100

我想分别获取每组最后两列的连续差异。以及每组这些连续差异的平均值。

预期输出为:

Column1 Column2 Column3 Column4        Column5
A1      45      50      70-50 = 20
A1      70      90      100-90 = 10    15  
A1      100     150
A2      500     510     550-510 = 40
A2      550     600
A3      1000    1100

在这里,我将数据保存到数据框中并尝试获得预期的输出。

我的代码如下:

df[output]= ([((float(df['Column3']) - float(df['Column2'].shift(-1)))*-1)/float(len(report_map1[i]))])

我想知道他们是否有更简单的方法来获得预期的结果?

最佳答案

使用DataFrameGroupBy.shift减去列Column3:

df['Column4'] =  df.groupby('Column1')['Column2'].shift(-1) - df['Column3']
#if necessary convert to floats
#df['Column4'] =  (df.groupby('Column1')['Column2'].shift(-1).astype(float) - 
#                  df['Column3'].astype(float))
print (df)
  Column1  Column2  Column3  Column4
0      A1       45       50     20.0
1      A1       70       90     10.0
2      A1      100      150      NaN
3      A2      500      510     40.0
4      A2      550      600      NaN
5      A3     1000     1100      NaN

关于python - 每组相邻列内的连续差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55605420/

相关文章:

python - 在 python 中创建一个名称中包含变量的列表

Python:如何根据特定元素拆分列表

python - 使用 writer.sheets 方法时的 Pandas.ExcelWriter KeyError

python - 使用不区分大小写的方式从行名中选择数据帧行(如 `grep -i` )

Python/pandas - 将 DataFrame.apply 与函数返回字典一起使用

c# - 在 Where LINQ 查询中使用 Contains()

Prolog 中的阶乘列表

python - 将此列表字典简化为包含所有/仅包含唯一值的单个列表

Python共享库: RTLD_GLOBAL segfault

python - 将列表转换为字符串