gpt4 book ai didi

python - 根据其他两个数据框的单元格内容创建一个 pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:56 24 4
gpt4 key购买 nike

我有两个行数和列数相同的数据框。我想基于这两个数据框创建第三个数据框,它与其他两个数据框具有相同的维度。第三个数据帧中的每个单元格应该是分别应用于 df1 和 df2 中相应单元格值的函数的结果。

即如果我有

df1 = | 1 | 2 |
| 3 | 4 |

df2 = | 5 | 6 |
| 7 | 8 |

那么df3应该是这样的

df3 = | func(1, 5) | func(2, 6) |
| func(3, 7) | func(4, 8) |

我有一种方法可以做到这一点,我认为它不是很 pythonic 也不适合大型数据帧,我想知道是否有一种有效的方法来做这样的事情?

我想申请的功能是:

def smape3(y, yhat, axis=0):
all_zeros = not (np.any(y) and np.any(yhat))
if all_zeros:
return 0.0
return np.sum(np.abs(yhat - y), axis) / np.sum(np.abs(yhat + y), axis)

它可用于生成单个标量值或值数组。在我上面的用例中,函数的输入将是两个标量值。所以 smape(1, 5) = 0.66。

最佳答案

您可以使用矢量化方法:

df1 = pd.DataFrame([[1, 2], [3, 4]])
df2 = pd.DataFrame([[5, 6], [7, 8]])

arr = np.where(df1.eq(0) & df2.eq(0), 0, (df2 - df1).abs() / (df2 + df1).abs())

df = pd.DataFrame(arr)

print(df)

0 1
0 0.666667 0.500000
1 0.400000 0.333333

或者如果你想在一个函数中分离一些逻辑:

def smape3(df1, df2):
return (df2 - df1).abs() / (df2 + df1).abs()

df = pd.DataFrame(np.where(df1.eq(0) & df2.eq(0), 0, smape3(df1, df2)))

关于python - 根据其他两个数据框的单元格内容创建一个 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53327932/

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