首页 > 解决方案 > 制作新列时修复 Pandas NaN?

问题描述

我有两个熊猫的数据框

id   volume
1       100
2       200
3       300

id   2020-07-01  2020-07-02 ...
1            12          14
2             5          1
3             7          8

我正在尝试根据第二个表中的值在第一个表中创建一个新列。

df['Total_Change'] = df2.iloc[:, 0] - df2.iloc[:, -1]
df['Change_MoM'] = df2.iloc[:, -2] - df2.iloc[:, -1]

这行得通,但是表中的值都向下移动了一个,因此第一个值是 NaN 并且最后一个值丢失了,所以我的结果是

id  volume  Total_Change  Change_MoM
1      100           NaN         NaN
2      200            -2          -2
3      300             4           4

为什么会这样?我已经仔细检查了 df2.iloc 语句是否获取了正确的值,但我不明白为什么我的第一个表将值向下移动一行。我也尝试将表格向上移动一个,但在底部留下了一个 NaN。

两张桌子大小一样。需要明确的是,我想知道如何首先防止 NaN 发生,而不是用其他值替换它。

标签: python-3.xpandasdataframe

解决方案


两个 dfs 都有不同的索引,添加一个快速修复reset_index()

df=df.reset_index(drop=True)
df2=df2.reset_index(drop=True)

推荐阅读