首页 > 解决方案 > 如何在熊猫数据框中制作匹配列,记录其对是否在该条目位置有数据

问题描述

我在熊猫数据框中有一些时间序列数据。许多条目都有一个 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

标签: pythonpandasdataframe

解决方案


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

推荐阅读