Python / Pandas:填充特定行和列中的缺失值

时间:2018-05-29 09:49:28

标签: python python-3.x pandas

我在R中经验丰富,现在通过尝试将现有的一系列脚本从R转换为Python来学习Python(5000 6000 7000 8000 9000 是一个pandas DataFrame)。我被困在这条线上:

df

即。我正在尝试在特定的行/列中填充NA值。我一直在尝试不同的东西,最有希望的路线似乎是

df[df$id != df$id_old, c("col1", "col2")] <- NA

但是这会在第二行引发以下错误(不完全理解这一点)。

index = np.where(df.id != df.id_old)
df.col1[index] = np.repeat(np.nan, np.size(index))

实现目标的最简洁方法是什么?

示例

Can only tuple-index with a MultiIndex

输出:

df = pd.DataFrame({'id' : [1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5], 
    'id_old' : [1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 5], 
    'col1' : np.random.normal(size = 12), 
    'col2' : np.random.randint(low = 20, high = 50, size = 12),
    'col3' : np.repeat('other info', 12)})
print(df)

预期结果:

   id  id_old      col1  col2        col3
0    1       1  0.320982    31  other info
1    1       1  0.398855    42  other info
2    1       2 -0.664073    30  other info
3    2       2  1.428694    48  other info
4    2       3 -1.240363    49  other info
5    3       4  0.023167    42  other info
6    4       4 -0.645114    44  other info
7    4       4 -1.033602    47  other info
8    4       4  0.295143    27  other info
9    4       5  0.531660    32  other info
10   5       5 -0.787401    33  other info
11   5       5  2.033503    48  other info

1 个答案:

答案 0 :(得分:2)

使用.loc并传递一个列表,在R中您可以c(...)

loc允许进行就地分配。

示例:

df.loc[df.id!=df.id_old, ['col1', 'col2']] = np.nan

输出:

        col1  col2        col3  id  id_old
0   2.411473  31.0  other info   1       1
1   0.874083  43.0  other info   1       1
2        NaN   NaN  other info   1       2
3   2.156903  20.0  other info   2       2
4        NaN   NaN  other info   2       3
5        NaN   NaN  other info   3       4
6   0.933760  22.0  other info   4       4
7  -1.239806  42.0  other info   4       4
8  -0.493344  41.0  other info   4       4
9        NaN   NaN  other info   4       5
10 -0.751290  30.0  other info   5       5
11  0.327527  31.0  other info   5       5