gpt4 book ai didi

python-3.x - 忽略 NaN 的两个 DataFrame 的元素最大值

转载 作者:行者123 更新时间:2023-12-04 01:37:47 24 4
gpt4 key购买 nike

我有两个数据框(df1 和 df2),每个都有相同的行和列。我想逐个元素地取这两个数据帧中的最大值。此外,任何带有数字和 NaN 的元素最大值的结果都应该是数字。到目前为止我实现的方法似乎效率低下:

def element_max(df1,df2):
import pandas as pd
cond = df1 >= df2
res = pd.DataFrame(index=df1.index, columns=df1.columns)
res[(df1==df1)&(df2==df2)&(cond)] = df1[(df1==df1)&(df2==df2)&(cond)]
res[(df1==df1)&(df2==df2)&(~cond)] = df2[(df1==df1)&(df2==df2)&(~cond)]
res[(df1==df1)&(df2!=df2)&(~cond)] = df1[(df1==df1)&(df2!=df2)]
res[(df1!=df1)&(df2==df2)&(~cond)] = df2[(df1!=df1)&(df2==df2)]
return res

还有其他想法吗?感谢您的时间。

最佳答案

您可以使用 where 用另一个 df 来测试你的 df,条件是 True ,来自 df 的值返回,当 false 来自 df1 的值被退回。此外,在 NaN 的情况下值在 df1然后再调用 fillna(df)将使用 df 中的值填补那些NaN并返回所需的df:

In [178]:
df = pd.DataFrame(np.random.randn(5,3))
df.iloc[1,2] = np.NaN
print(df)
df1 = pd.DataFrame(np.random.randn(5,3))
df1.iloc[0,0] = np.NaN
print(df1)

0 1 2
0 2.671118 1.412880 1.666041
1 -0.281660 1.187589 NaN
2 -0.067425 0.850808 1.461418
3 -0.447670 0.307405 1.038676
4 -0.130232 -0.171420 1.192321
0 1 2
0 NaN -0.244273 -1.963712
1 -0.043011 -1.588891 0.784695
2 1.094911 0.894044 -0.320710
3 -1.537153 0.558547 -0.317115
4 -1.713988 -0.736463 -1.030797

In [179]:
df.where(df > df1, df1).fillna(df)

Out[179]:
0 1 2
0 2.671118 1.412880 1.666041
1 -0.043011 1.187589 0.784695
2 1.094911 0.894044 1.461418
3 -0.447670 0.558547 1.038676
4 -0.130232 -0.171420 1.192321

关于python-3.x - 忽略 NaN 的两个 DataFrame 的元素最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com