【问题标题】:How to calculate cumulative missing values group by an ID (in python)?如何按 ID 计算累积缺失值组(在 python 中)?
【发布时间】:2022-01-24 03:02:08
【问题描述】:

a) 给定以下“id”和“freq”

df = pd.DataFrame({'id':[1,1,1,1,1,1,2,2,2,2,2,3,3,3],'freq':[1,2,np.NaN, np.NaN, np.NaN, 6,7,8,9,10,np.NaN,np.NaN,13,14]})

df

b) 如何通过“id”计算“freq”组的累积缺失?当频率 > 0 时重置为零

所以结果 'cum_null' 应该看起来像 - 打印(df(['cum_null']) 0 0 1 2 3 0 0 0 0 0 1 1 0 0

c) 我试过这个。非常接近,但当 freq > 0 时无法重置为零

df['cum_null'] = id_grp['freq'].apply(lambda x:x.isnull().astype(int).cumsum())

df

【问题讨论】:

  • 您的样本的预期输出是什么?
  • 打印(df(['cum_null']) 0 0 1 2 3 0 0 0 0 0 1 1 0 0
  • 样本中的频率始终大于 0
  • 'freq" 是指“id”在给定月份的交易次数。所以 1 表示 1 次交易,2 表示 2 次交易,null 表示“没有”交易。我想知道没有任何交易的月数如何,即计算“freq”月份连续为空的情况。

标签: python pandas cumsum


【解决方案1】:

如果你能做到groupbymask

df['cum_null'] = df.freq.isnull().groupby(df['id']).cumsum().where(df.freq.isnull(),0)
0     0
1     0
2     1
3     2
4     3
5     0
6     0
7     0
8     0
9     0
10    1
11    1
12    0
13    0
Name: freq, dtype: int64

【讨论】:

    猜你喜欢
    • 2022-08-22
    • 2021-06-06
    • 2013-05-26
    • 2020-07-18
    • 2019-06-06
    • 2021-09-03
    • 2021-06-19
    • 2019-04-11
    相关资源
    最近更新 更多