gpt4 book ai didi

python - 将一个 Pandas DataFrame 的元素放置到另一个 DataFrame 中元素的位置

转载 作者:行者123 更新时间:2023-12-05 01:06:34 25 4
gpt4 key购买 nike

我有两个 Pandas DataFrame,df1 和 df2。

第一个使用零和一指定元素的“位置”。

第二个指定元素的值,但不指定它们的位置(即它只是从 Col1 到 Col4 从左到右填充)。

df1 = pd.DataFrame([[1,0,0,0], [1,0,0,1], [0,1,0,1], [0,1,1,1]], columns=['Col1', 'Col2', 'Col3', 'Col4'])
df2 = pd.DataFrame([[1,0,0,0], [0.4,0.6,0,0], [0.8,0.2,0,0], [0.1,0.4,0.5,0]], columns=['Col1', 'Col2', 'Col3', 'Col4'])

df1
Col1 Col2 Col3 Col4
0 1 0 0 0
1 1 0 0 1
2 0 1 0 1
3 0 1 1 1

df2
Col1 Col2 Col3 Col4
0 1 0 0 0
1 0.4 0.6 0 0
2 0.8 0.2 0 0
3 0.1 0.4 0.5 0

我想创建第三个 DataFrame,df3,它将 df2 中的非零值放置在 df1 中的相应位置。我想从左到右工作,即df2每一行中最左边的非零元素应该放在df1中最左边的位置。

df3 = pd.DataFrame([[1,0,0,0], [0.4,0,0,0.6], [0,0.8,0,0.2], [0,0.1,0.4,0.5]], columns=['Col1', 'Col2', 'Col3', 'Col4'])

df3
Col1 Col2 Col3 Col4
0 1 0 0 0
1 0.4 0 0 0.6
2 0 0.8 0 0.2
3 0 0.1 0.4 0.5

由于真正的 DataFrame 相对较大,因此需要一个有效的解决方案(即循环遍历元素可能不是一种选择)。

非常感谢您的帮助!

最佳答案

如果你使用 numpy,有一个非常有效的解决方案。有一种名为 place 的方法可以满足您的需求。

# get series with right typing
values1 = df1.values.astype(np.float64)
values2 = df2.values.astype(np.float64)
#replace 1 values in the series1 with non zero values from series2
np.place(values1, values1==1, values2[values2 != 0])
# replace values in the dataframe1
df1.loc[:] = values1

关于python - 将一个 Pandas DataFrame 的元素放置到另一个 DataFrame 中元素的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68768173/

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