python - 使用 iloc 和 bool 掩码设置数据帧(数据帧中多个不同索引(行)值的掩码)

标签 python pandas dataframe pandas-groupby array-broadcasting

我想根据不同 pandas 数据框中 Nan 值的位置将 pandas 数据框中的值更改为 Nan。我想在数组中的多个位置执行此操作。因此,如果它位于索引(行)值相同的数组开头,则它可以工作。如果我想将其设置为在箭头中偏移 20 行,然后偏移 40 行,该怎么办?

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': list(range(0,100)), 'B': list(range(0,100))})


df2_null = df2.isnull()
df[df2_null] = np.NaN


df.iloc[0:4]

df2 = pd.DataFrame({'A': [1, None, 1, 1], 'B': [None, 1, None, 1]})

df2_null = df2.isnull()
df[df2_null] = np.NaN
df.iloc[0:4]

我如何让它在下面工作? 因为第一行给出了一个错误,第二行会重现所有 np.Nan 无论我在哪里执行它。我一直不知道如何做到这一点。

df.iloc[20:24][df2_null] = np.Nan
df.loc[df[df2_null].iloc[20:24].index] = np.NaN

最佳答案

我相信需要DataFrame.ilocDataFrame.mask ,默认情况下通过 bool 掩码将值设置为 NaN(只需使用 bool 掩码所选 df 的行数和列数相同)。

此外,df2_null 掩码会转换为 numpy 数组,以避免按索引对齐。

df.iloc[20:24] = df.iloc[20:24].mask(df2_null.values)
print (df.iloc[15:30])
       A     B
15  15.0  15.0
16  16.0  16.0
17  17.0  17.0
18  18.0  18.0
19  19.0  19.0
20  20.0   NaN
21   NaN  21.0
22  22.0   NaN
23  23.0  23.0
24  24.0  24.0
25  25.0  25.0
26  26.0  26.0
27  27.0  27.0
28  28.0  28.0
29  29.0  29.0

Numpy 解决方案 numpy.where ,与 pandas 解决方案原理相同:

df = pd.DataFrame({'A': list(range(0,30)), 'B': list(range(0,30))})

arr = df.values.astype(float)
arr[20:24] = np.where(df2_null.values, np.nan, arr[20:24])
print (arr)
[[ 0.  0.]
 [ 1.  1.]
 [ 2.  2.]
 [ 3.  3.]
 [ 4.  4.]
 [ 5.  5.]
 [ 6.  6.]
 [ 7.  7.]
 [ 8.  8.]
 [ 9.  9.]
 [10. 10.]
 [11. 11.]
 [12. 12.]
 [13. 13.]
 [14. 14.]
 [15. 15.]
 [16. 16.]
 [17. 17.]
 [18. 18.]
 [19. 19.]
 [20. nan]
 [nan 21.]
 [22. nan]
 [23. 23.]
 [24. 24.]
 [25. 25.]
 [26. 26.]
 [27. 27.]
 [28. 28.]
 [29. 29.]]

关于python - 使用 iloc 和 bool 掩码设置数据帧(数据帧中多个不同索引(行)值的掩码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51942957/

相关文章:

python - 合并列,如果值不相同,则使用 pandas 取任何非空值

python - 如何在python中按时间间隔对CSV文件进行排序

python - 按列中的值对数据框进行采样并保留所有行

python - dask dataframe 读取 parquet 架构差异

r - 改变多列以获得 passfail 条件的 1 或 0

python - 如何处理 Linux/Python 依赖?

python:map() 还是列表理解?

python - 添加一个虚拟值,指示分组数据框中连续行之间的变化

python - sqlalchemy : filter by relationship (like django orm)?

python - 根据第二个 df 替换 python pandas 列中的值