【发布时间】:2021-08-13 16:24:14
【问题描述】:
我有两个 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 相对较大,因此需要一个有效的解决方案(即循环遍历元素可能不是一种选择)。
非常感谢您的帮助!
【问题讨论】:
-
pd.DataFrame(df.values*df2.values, columns=df.columns, index=df.index) -
@TomS 不工作,索引不一样.. 仅仅相乘是不够的