pandas - 计算特定列中所有 NaN 值的累积计数
问题描述
我有一个数据框:
# create example df
df = pd.DataFrame(index=[1,2,3,4,5,6,7])
df['ID'] = [1,1,1,1,2,2,2]
df['election_date'] = pd.date_range("01/01/2010", periods=7, freq="M")
df['stock_price'] = [1,np.nan,np.nan,4,5,np.nan,7]
# sort values
df.sort_values(['election_date'], inplace=True, ascending=False)
df.reset_index(drop=True, inplace=True)
df
ID election_date stock_price
0 2 2010-07-31 7.0
1 2 2010-06-30 NaN
2 2 2010-05-31 5.0
3 1 2010-04-30 4.0
4 1 2010-03-31 NaN
5 1 2010-02-28 NaN
6 1 2010-01-31 1.0
我想计算每个列的所有累积np.nan
计数。stock_price
ID
预期结果是:
df
ID election_date stock_price cum_count_nans
0 2 2010-07-31 7.0 1
1 2 2010-06-30 NaN 0
2 2 2010-05-31 5.0 0
3 1 2010-04-30 4.0 2
4 1 2010-03-31 NaN 1
5 1 2010-02-28 NaN 0
6 1 2010-01-31 1.0 0
任何想法如何解决它?
解决方案
想法是通过索引更改顺序,然后在自定义函数中测试缺失值,移位并使用累积和:
f = lambda x: x.isna().shift(fill_value=0).cumsum()
df['cum_count_nans'] = df.iloc[::-1].groupby('ID')['stock_price'].transform(f)
print (df)
ID election_date stock_price cum_count_nans
0 2 2010-07-31 7.0 1
1 2 2010-06-30 NaN 0
2 2 2010-05-31 5.0 0
3 1 2010-04-30 4.0 2
4 1 2010-03-31 NaN 1
5 1 2010-02-28 NaN 0
6 1 2010-01-31 1.0 0
推荐阅读
- spring-boot - Spring Boot application.properties 未注册
- javascript - React 中的 useState 出现问题,重新渲染过多
- python - 为什么重启烧瓶服务器后数据库数据被删除?
- javascript - ObjMap 返回值或函数
- perl - Perl SOAP::Lite 调用失败
- ibm-cloud - 如何使用 IBM Watson 在意图中标记子实体?
- c++ - C++ fstream读写位置未对齐
- mysql - 使用 JDBC 准备语句查询 MySQL 时是否需要转义下划线?
- javascript - jquery在已经从下拉列表中显示一个div之后显示/隐藏div
- haskell - 用光泽制作地图