计算数据框中所有行与特定行之间的差异
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)
【讨论】:
以上是关于计算数据框中所有行与特定行之间的差异的主要内容,如果未能解决你的问题,请参考以下文章
SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异