计算满足条件的列之间的差异

0 投票
1 回答
30 浏览
提问于 2025-04-14 15:59

我有一个数据集,内容如下:

import pandas as pd
df = pd.DataFrame(
    {"Time": [1,2,3,1,2,3],
     "Prop1": ["A","B","A","A","B","B"],
     "Prop2": [4, 5, 1, 5, 4, 3]})
时间 属性1 属性2
1 A 4
2 B 5
3 A 1
1 A 5
2 B 4
3 B 3

我想要的是每个时间点的差异...

  1. 在每个时间步骤
  2. 对于属性1的值
  3. 属性2之间的差异

从这个数据集中,我希望得到类似下面的结果...

时间 属性1 属性2 属性2差异
1 A 4 NaN
2 B 5 NaN
3 A 1 NaN
1 A 5 (5-4)= 1
2 B 4 (4-5)= -1
3 B 3 NaN

我知道有一个 .diff() 函数,但我不太确定如何应用我想要的条件。

这是为了减少我脚本中的深层循环,我已经做过:

time = df["Time"].unique()
for cTime in time:
    for prop1 in df[df["Time"] == cTime,"Prop1"].unique():
        df.loc[(df["Time"]==cTime) & (df["Prop1"] == prop1] = cDF["Prop2"][1] - cDF["Prop2"][0]

还有其他循环的变体。

这个操作是在非常大的数据集上进行的,所以每去掉一个循环都能大大提高效率。

1 个回答

1

代码

df['Prop2Diff'] = df.groupby(['Time', 'Prop1'])['Prop2'].diff()

数据框

   Time Prop1  Prop2  Prop2Diff
0     1     A      4        NaN
1     2     B      5        NaN
2     3     A      1        NaN
3     1     A      5        1.0
4     2     B      4       -1.0
5     3     B      3        NaN

撰写回答