繁体   English   中英

iloc 条件组按 pandas 填充

[英]iloc Conditional groupby pandas fill

尝试有条件地在 dataframe 中填充 NaN,基于:
1. A 上的值(使用 groupby 完成)
2.在groupby(A)里面,如果value是nan并且是first,填充为零然后ffill(例如A=a)
3. 在 groupby(A) 中,如果 value 是 nan 并且不是 first,则 bfill (例如 A=b)
4. 在 groupby(A) 中,如果值为 nan 但没有数据点可跟随,则 ffill (例如 A=c)

我闻到三元 + lambda 的味道,但想要一种 Python 的写法。

基本上,起点是:

df
     A    B
0    a    NaN
1    a    NaN
2    a    3.0
3    a    4.0
4    b    4.0
5    b    NaN
6    b    6.0
7    b    6.0
8    c    7.0
9    c    NaN
10   c    NaN

df 应该变成:

df
     A    B
0    a    0.0
1    a    0.0
2    a    3.0
3    a    4.0
4    b    4.0
5    b    6.0
6    b    6.0
7    b    6.0
8    c    7.0
9    c    7.0
10   c    7.0

我们可以做GroupBy.ffill ,然后我们确保每个组的中间结果都正确填写,之后我们可以用0做一个Series.fillna ,因为这些是唯一剩下的值:

df['B'] = df.groupby('A')['B'].ffill().fillna(0)

    A    B
0   a  0.0
1   a  0.0
2   a  3.0
3   a  4.0
4   b  4.0
5   b  4.0
6   b  6.0
7   b  6.0
8   c  7.0
9   c  7.0
10  c  7.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM