python - 迭代数据帧并替换为另一个数据帧中的值

标签 python pandas dataframe replace

我有 2 个数据帧,df1 和 df2,df2 保存相应列的最小值和最大值。

    import numpy as np
    import pandas as pd

    df1 = pd.DataFrame(np.random.randint(0,50,size=(10, 5)), columns=list('ABCDE'))
    df2 = pd.DataFrame(np.array([[5,3,4,7,2],[30,20,30,40,50]]),columns=list('ABCDE'))

当 df1 单元格值低于/高于相应列的最小/最大值时,我想迭代 df1 并用 df2 的单元格值替换单元格值。

最佳答案

首先不要loop/iterate in pandas ,如果存在其他更好的矢量化解决方案,如下所示。

使用numpy.select根据条件广播设置值:

np.random.seed(123)
df1 = pd.DataFrame(np.random.randint(0,50,size=(10, 5)), columns=list('ABCDE'))
df2 = pd.DataFrame(np.array([[5,3,4,7,2],[30,20,30,40,50]]),columns=list('ABCDE'))

print (df1)
    A   B   C   D   E
0  45   2  28  34  38
1  17  19  42  22  33
2  32  49  47   9  32
3  46  32  47  25  19
4  14  36  32  16   4
5  49   3   2  20  39
6   2  20  47  48   7
7  41  35  28  38  33
8  21  30  27  34  33

print (df2)
    A   B   C   D   E
0   5   3   4   7   2
1  30  20  30  40  50

#for pandas below 0.24 change .to_numpy() to .values
min1 = df2.loc[0].to_numpy()
max1 = df2.loc[1].to_numpy()
arr = df1.to_numpy()

df = pd.DataFrame(np.select([arr < min1, arr > max1], [min1, max1], arr), 
                  index=df1.index, 
                  columns=df1.columns)
print (df)
    A   B   C   D   E
0  30   3  28  34  38
1  17  19  30  22  33
2  30  20  30   9  32
3  30  20  30  25  19
4  14  20  30  16   4
5  30   3   4  20  39
6   5  20  30  40   7
7  30  20  28  38  33
8  21  20  27  34  33
9  12  20   4  40   5

另一个更好的解决方案 numpy.clip :

df = pd.DataFrame(np.clip(arr, min1, max1), index=df1.index,  columns=df1.columns)
print (df)
    A   B   C   D   E
0  30   3  28  34  38
1  17  19  30  22  33
2  30  20  30   9  32
3  30  20  30  25  19
4  14  20  30  16   4
5  30   3   4  20  39
6   5  20  30  40   7
7  30  20  28  38  33
8  21  20  27  34  33
9  12  20   4  40   5

关于python - 迭代数据帧并替换为另一个数据帧中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59158834/

相关文章:

python - 为什么 `zip()` 代码的示例有不同的输出?

python - 为什么这不会附加到列表中?

python - 在 Pandas 中获取虚拟变量,其中行包含多个变量作为列表?

Python:在多张纸上将 pandas DataFrame 写入 Excel 的最快方法

多个类别的R max

r - 添加具有数据帧 R 中行最后一列的最后一个值的每一列

python - 是否可以在内存中没有原始模型的情况下加载 PyMC3 跟踪和访问值?

Python 正则表达式捕获组拆分问题

python - 如何使用 pandas 将整个列字符串转换为数据框中的 float ?

R - 如果满足条件则减去不同的列