根据条件填充熊猫

时间:2020-02-27 10:19:20

标签: pandas

我有一个空的每日价格数据框。然后,我编写了一个函数,该函数给出从星期一开始的星期几。

  Day   WC Monday   Price 1  Price 2
1/1/12  1/1/12      44        34
2/1/13  1/1/12      55        34
3/1/12  1/1/12      44        34
4/1/13  1/1/12      NA        NA
5/1/12  1/1/12      NA        NA
6/1/13  1/1/12      34        NA
7/1/12  1/1/12      33        NA
8/1/13  8/1/12      12        NA
9/1/12  8/1/12      34        NA
10/1/13 8/1/12      23        NA

我想说的是,如果价格仅剩余NA到该列的末尾,那么只用最后一个值填充到不完整的一周的末尾

所以预期的输出是:

  Day   WC Monday   Price 1  Price 2
1/1/12  1/1/12      44        34
2/1/13  1/1/12      55        34
3/1/12  1/1/12      44        34
4/1/13  1/1/12      NA        34
5/1/12  1/1/12      NA        34
6/1/13  1/1/12      34        34
7/1/12  1/1/12      33        34
8/1/13  8/1/12      12        NA
9/1/12  8/1/12      34        NA
10/1/13 8/1/12      23        NA

1 个答案:

答案 0 :(得分:1)

想法已经过测试,如果每组的最后一行缺少GroupBy.transformGroupBy.last的值,然后用DataFrame.maskGroupBy.ffill替换缺失的值:

c = ['Price 1','Price 2']
m = df.isna().groupby('WC Monday')[c].transform('last')

df[c] = df[c].mask(m, df.groupby('WC Monday')[c].ffill())
print (df)
       Day WC Monday  Price 1  Price 2
0   1/1/12    1/1/12     44.0     34.0
1   2/1/13    1/1/12     55.0     34.0
2   3/1/12    1/1/12     44.0     34.0
3   4/1/13    1/1/12      NaN     34.0
4   5/1/12    1/1/12      NaN     34.0
5   6/1/13    1/1/12     34.0     34.0
6   7/1/12    1/1/12     33.0     34.0
7   8/1/13    8/1/12     12.0      NaN
8   9/1/12    8/1/12     34.0      NaN
9  10/1/13    8/1/12     23.0      NaN