【问题标题】:pandas fill column with values based on condition熊猫根据条件用值填充列
【发布时间】:2019-04-28 15:32:20
【问题描述】:

我的 pandas 数据框中有一列,如下所示:

   Status
1  Past Due
2  Yet to Calc
3  Overdue
4  Past Due
5  Past Due
6  Yet to Calc
7  Past Due
8  Past Due
9  Past Due
10  Yet to Calc
11  Overdue
12  Yet to Calc
13  Past Due
14  Past Due
15  Past Due
16  Yet to Calc
17  Overdue
18  Past Due
19  Past Due
20  Past Due
21  Yet to Calc

我想用“过期”填充“过期”和“尚未计算”之间的所有值。所以我的预期输出是:

   Status
1  Past Due
2  Yet to Calc
3  Overdue
4  Overdue
5  Overdue
6  Yet to Calc
7  Past Due
8  Past Due
9  Past Due
10 Yet to Calc
11 Overdue
12 Yet to Calc
13 Past Due
14 Past Due
15 Past Due
16 Yet to Calc
17 Overdue
18 Overdue
19 Overdue
20 Overdue
21 Yet to Calc

我尝试按切片分组并在组内向前填充,如下所示:

df3['Inventory_1'] = df3.groupby(df3.loc['Overdue':'Yet to Calc','Inventory_1']).ffill()

但上面返回一个空系列并且不填充。

如果不使用 ffill,有什么方法可以解决这个问题?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    这里的总体思路是屏蔽所有不是Yet to CalcOverdue 的值,并使用ffill。但是,这也将 ffill Yet to Calc 转发,这是永远不需要的。由于我们只需要保留 Yet to Calc 以停止填充 Overdue 值,因此我们可以将结果中不是 Overdue 的所有内容替换为原始 DataFrame 中包含的所有内容。


    mask + ffill + isin

    s = df.Status.mask(~df.Status.isin(['Overdue', 'Yet to Calc'])).ffill()
    s[s.ne('Overdue')] = df.Status
    
    print(s)
    

    1        Past Due
    2     Yet to Calc
    3         Overdue
    4         Overdue
    5         Overdue
    6     Yet to Calc
    7        Past Due
    8        Past Due
    9        Past Due
    10    Yet to Calc
    11        Overdue
    12    Yet to Calc
    13       Past Due
    14       Past Due
    15       Past Due
    16    Yet to Calc
    17        Overdue
    18        Overdue
    19        Overdue
    20        Overdue
    21    Yet to Calc
    Name: Status, dtype: object
    

    【讨论】:

    • 这个变体完美,感谢 user3483203!!
    • 在我的原始数据集中,如果有其他值而不是 Yet to Calc,如何进行屏蔽?只要出现“逾期”,我仍然需要填写“过期”值,但尚未计算的值被替换为随机值
    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2019-06-05
    • 2021-03-18
    • 2016-12-11
    相关资源
    最近更新 更多