计算满足条件的列之间的差异
我有一个数据集,内容如下:
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 | 属性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