python - pandas DataFrame 中的 if-else 条件引用两行

标签 python pandas dataframe

我有一个示例,我需要根据 if-else 条件填充数据框列,该条件引用当前行和前一行。这是示例数据集:

time = pd.Series(pd.date_range(start='20140101', end='20190901', freq='Q').astype('period[Q]'), name='time')
results = pd.Series(['0','W','W','W','0','0','L','L','L','L','W','W','W','0','0','W','W','W','0','L','L','0'], name='result')
df = pd.concat([time, results], axis=1)

我想创建一个列,df['last win'],其中包含当前行的 time 值,如果它是 W,或最后一个 time,它有一个 W。因此,所需的输出将是:

     time result last_win
0  2014Q1      0      NaT
1  2014Q2      W   2014Q2
2  2014Q3      W   2014Q3
3  2014Q4      W   2014Q4
4  2015Q1      0   2014Q4
5  2015Q2      0   2014Q4
6  2015Q3      L   2014Q4
7  2015Q4      L   2014Q4
8  2016Q1      L   2014Q4
9  2016Q2      L   2014Q4
10 2016Q3      W   2016Q3
11 2016Q4      W   2016Q4
12 2017Q1      W   2017Q1
13 2017Q2      0   2017Q1
14 2017Q3      0   2017Q1
15 2017Q4      W   2017Q4
16 2018Q1      W   2018Q1
17 2018Q2      W   2018Q2
18 2018Q3      0   2018Q2
19 2018Q4      L   2018Q2
20 2019Q1      L   2018Q2
21 2019Q2      0   2018Q2

我不确定如何以有条件地工作的方式使用 .apply.shift 功能。

最佳答案

使用 where 然后使用 fillna 指定前向填充来填充丢失和连接:

df['last_win'] = np.where(df['result'] == 'W', df['time'], np.NaN)
df.fillna(method="ffill", inplace=True)

关于python - pandas DataFrame 中的 if-else 条件引用两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57836515/

相关文章:

python - 关于 Pandas DF 的另一个 SQL 问题。帮我一劳永逸地结束这些

Python:Flask 缓存一段时间

python - Pandas Dataframe.describe() : Which kind of standard deviation?

python - Pandas:加入 extractall 的结果

Pandas :创建行以填补数字空白

python - Pandas:将列表列表转换为多列

python - 如何使用对应字典重命名 pd.value_counts() 索引

python - Pandas - 多列上的 idxmin 保持所有关系

python - 使用多处理的文件处理器

python - 使用 Google App Engine 在线游戏中的人工智能