是否有一种有效的方法可以根据其他列的条件值使用前几行的值来计算 Pandas 中的列值?

Is there an efficient way to compute column values in Pandas using values from previous rows based on conditional values from other columns?

考虑循环遍历我的 DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Price': [1000, 1000, 1000, 2000, 2000, 2000, 2000, 1400, 1400],
    'Count': [0, 0, 0, 0, 0, 0, 0, 0, 0]
})

for idx in df.index:
    if df['Price'].iloc[idx] > 1500:
        if idx > 0:
            df['Count'].iloc[idx] = df['Count'].iloc[idx - 1] + 1

导致:

Price Count
0 1000 0
1 1000 0
2 1000 0
3 2000 1
4 2000 2
5 2000 3
6 2000 4
7 1400 0
8 1400 0

有没有更有效的方法来做到这一点?

使用 Series.cumsum, then use groupby.cumcount 创建伪组以生成组内计数:

groups = df.Price.le(1500).cumsum()
df['Count'] = df.Price.gt(1500).groupby(groups).cumcount()

#    Price  Count
# 0   1000      0
# 1   1000      0
# 2   1000      0
# 3   2000      1
# 4   2000      2
# 5   2000      3
# 6   2000      4
# 7   1400      0
# 8   1400      0

使用 mask 隐藏低于 1500 的值并使用 cumsum 创建计数器:

df['Count'] = df.mask(df['Price'] <= 1500)['Count'].add(1).cumsum().fillna(0).astype(int)
print(df)

# Output:
   Price  Count
0   1000      0
1   1000      0
2   1000      0
3   2000      1
4   2000      2
5   2000      3
6   2000      4
7   1400      0
8   1400      0