python - 如何在熊猫数据框中制作匹配列,记录其对是否在该条目位置有数据
问题描述
我在熊猫数据框中有一些时间序列数据。许多条目都有一个 NaN 值,我想创建一个匹配列来存储该条目是否具有 NaN 值,然后用 0 替换 NaN 值。虽然替换 NaN 值很容易,但我不能弄清楚如何做第一部分。如果重要的话,我已经使用了透视操作,所以列名是元组。数据框中的一些值是整数,有些是浮点数。
示例输入:
df = pd.DataFrame(np.array([[5, 7, np.nan], [np.nan, 8, 9.8], [7, np.nan, 12]]), columns=[('Label', 'A'), ('Label', 'B'), ('Label', 'C')])
Label
A B C
2021-03-01 5 7 NaN
2021-03-02 NaN 8 9.8
2021-03-03 7 NaN 12
期望的输出:
Label
A B C
Has data Value Has data Value Has data Value
2021-03-01 1 5 1 7 0 0
2021-03-02 0 0 1 8 1 98
2021-03-03 1 7 0 0 1 12
解决方案
concat
pd.concat({
'Has data': df.notna().astype(int),
'Value': df.fillna(0)
}).unstack(0)
Label
A B C
Has data Value Has data Value Has data Value
2021-03-01 1 5.0 1 7.0 0 0.0
2021-03-02 0 0.0 1 8.0 1 98.0
2021-03-03 1 7.0 0 0.0 1 12.0
推荐阅读
- mysql - 如何在sqlite中为连接表编写where子句并获取删除= 0的所有联系人
- java - 对抛出的任何异常做出反应
- javascript - 抓取以下载由 javascript 处理的文件
- python - PyTorch:'ToTensor()' 将彩色图像变成 9 张灰度图片
- c# - 如何使用 retry-after 标头使用 asp.net http 客户端轮询 API
- android - 在我的苹果和安卓应用程序中添加付款和订阅的方法是什么?
- java - 当 wifi 和蜂窝数据都打开且 wifi 没有互联网连接时,使用蜂窝数据上网
- android - 智能投射到“CredentialsClient!” 不可能跟随教程
- windows - 非 UEFI 主板 INSYDE BIOS 3.6 中的 MBR2GPT.exe 转换
- javascript - Angular *ngIf 不再重复