【问题标题】:iloc Conditional groupby pandas filliloc 条件分组由 pandas 填充
【发布时间】:2020-06-18 22:47:55
【问题描述】:

尝试在数据框中有条件地填充 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

【问题讨论】:

    标签: python pandas data-cleaning data-processing


    【解决方案1】:

    我们可以做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
    

    【讨论】:

    • 答案很好,我的问题很糟糕。我想实现一个bfill。我将不得不对其进行编辑以相应地突出显示它。对不起。
    猜你喜欢
    • 2021-06-04
    • 2014-10-14
    • 1970-01-01
    • 2017-06-29
    • 2020-11-17
    • 2023-03-19
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多