python - pandas:shift(1)组中的所有值,除了第一个(每个组中)应该为0
问题描述
给定以下df:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,3, (10,2)), columns=['a','b']).sort_values(['a'])
现在我想用该组中的前一个值替换每个组中的所有值,除了我想用 0 替换的每个组中的第一个值。
这不会:
df.groupby("a", sort = False).transform(lambda g: g.shift(1).fillna(0))
因为我只想用 0 替换第一个 np.nan
(在每个组中)
解决方案
这是你需要的吗?
s=df.groupby("a", sort = False).b.shift()
s
Out[913]:
0 NaN
1 1.0
2 2.0
3 1.0
4 1.0
5 NaN
6 2.0
7 2.0
8 1.0
9 2.0
Name: b, dtype: float64
idx=s.groupby(df.a).head(1).index
s.loc[idx]=0
推荐阅读
- hdfs - 无法从 Apache NIFI PUTHDFS 处理器写入 Azure datalake
- python - 如何在 Python 中基于多个元数据属性对数据集进行分区
- mediawiki - MediaWiki 未显示任何最近的更改
- android - 无法解析我的依赖项中的所有库
- html - Outlook 电子邮件呈现 CSS
- google-ads-api - 谷歌广告活动的 Branch.io 动态链接
- batch-file - 如何将动态数量的参数传递给批处理文件以及如何将参数作为可能包含几个单词的字符串发送?
- asp.net-core - Postman 中的“无法得到任何回应”
- apache-spark - Pyspark 窗口 orderBy
- hyperledger-fabric - Hyperledger Fabric 网络上交易流的验证阶段(假设场景下)