计算数据框中所有行与特定行之间的差异

Posted

技术标签:

【中文标题】计算数据框中所有行与特定行之间的差异【英文标题】:Calculate the difference between all rows and a specific row in the dataframe 【发布时间】:2021-12-25 11:23:09 【问题描述】:

这是与this 线程类似的问题。

让我们将 df 视为:

df = pd.DataFrame([["a", 2, 3], ["b", 5, 6], ["c", 8, 9],["a", 0, 0], ["a", 8, 7], ["c", 2, 1]], columns = ["A", "B", "C"])

如何计算列“B”的所有行与组中第 N 个索引处的行(每个组的最低索引)之间的差异,并将其放在“D”列中?我想计算我的数据的均方位移,并且我想计算每组中的一列中的值与该组中第一个出现的行的差异。 我试过了:

df['D'] = df.groupby(["A"])['B'].sub(df.groupby(['A'])["B"].iloc[0])
Group = df.groupby(["A"])

但是,使用 .sub 和 groupby 会引发以下错误: AttributeError: 'SeriesGroupBy' 对象没有属性 'sub'

想要的结果是这样的:

   A   B   C   D
0  a   2   3   0  *lowest index in group "a"
1  b   5   6   0  *lowest index in group "b"
2  c   8   9   0  *lowest index in group "c"
3  a   0   0  -2
4  a   8   7   6
5  c   2   1  -6

【问题讨论】:

您使用什么公式来计算 D 列中的第一个值(即“0”)? 【参考方案1】:

我想这个答案对你来说已经足够了:

import pandas as pd

df = pd.DataFrame([["a", 2, 3], ["b", 5, 6], ["c", 8, 9],["a", 0, 0], ["a", 8, 7], ["c", 2, 1]], columns = ["A", "B", "C"])
print("df:")
print(df)
print()

groupA = df.groupby(['A'])
print("groupA:")
print(groupA.groups)
print()

print("lowest indices for each group from columnA:")
lowest_indices = dict()
for k, v in groupA.groups.items():
    lowest_indices[k] = v[0]
print(lowest_indices)
print()

columnB = df['B']
print("columnB:")
print(columnB)
print()

df['D'] = df['B']

for i in range(len(df)):
    group_at_i = df['A'].iloc[i]
    
    lowest_index_of_that = lowest_indices[group_at_i]
    b_element_at_that_index = df['B'].iloc[lowest_index_of_that]
    the_difference = df['B'].iloc[i] - b_element_at_that_index
    df.loc[i, 'D'] = the_difference
    
print("df:")
print(df)

【讨论】:

以上是关于计算数据框中所有行与特定行之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

创建一个差异矩阵比较R数据框中所有行之间的差异

如何计算熊猫数据框中组的每对行之间的函数

SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异

如何计算当前行与下一行?

Android Java:当前时间和未来特定时间之间的差异计算错误

计算数据框中特定列(SUM、AVG、STDEV)的所有嵌套级别聚合