[英]Create binary pandas DataFrame based on two DataFrames with different number of columns
我有兩個DataFrames
df1
和df2
,其中df2
只有一列,我嘗試根據其他兩個數據集創建df3
。 如果兩個DataFrame
列的值 > 0,我嘗試得到一個,否則為零。
df1:
01K 02K 03K 04K
Date
2021-01-01 NaN 3.5 4.2 NaN
2021-01-02 -2.3 -0.1 5.2 2.6
2021-01-03 0.3 NaN -2.5 8.2
2021-01-04 -0.4 NaN 3.0 -4.2
df2:
XX
Date
2021-01-01 NaN
2021-01-02 2.5
2021-01-03 -0.2
2021-01-04 0.3
df3:
01K 02K 03K 04K
Date
2021-01-01 0 0 0 0
2021-01-02 0 0 1 1
2021-01-03 0 0 0 0
2021-01-04 0 0 1 0
為了重現性:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K':['NaN', -2.3, 0.3, -0.4],
'02K':[3.5, -0.1, 'NaN', 'NaN'],
'03K':[4.2, 5.2, -2.5, 3.0],
'04K':['NaN', 2.6, 8.2, -4.2]})
df1 = df1.set_index('Date')
df1 = df1.replace('NaN',np.nan)
df2 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'XX':['NaN', 2.5, -0.2, 0.3]})
df2 = df2.set_index('Date')
df2 = df2.replace('NaN',np.nan)
我不知道如何分配條件,以便可以在具有不同列數的兩個DataFrames
之間進行比較。
我試過了(但假設尺寸相同):
df3 = ((df1 > 0) & (df2 > 0)).astype(int)
非常感謝!
將DataFrame.mul
用於多個第一個DataFrame
與Series
:
df = (df1 > 0).astype(int).mul((df2.iloc[:, 0] > 0).astype(int), axis=0)
print (df)
01K 02K 03K 04K
Date
2021-01-01 0 0 0 0
2021-01-02 0 0 1 1
2021-01-03 0 0 0 0
2021-01-04 0 0 1 0
或廣播:
df = ((df1 > 0) & (df2.iloc[:, [0]].to_numpy() > 0)).astype(int)
print (df)
01K 02K 03K 04K
Date
2021-01-01 0 0 0 0
2021-01-02 0 0 1 1
2021-01-03 0 0 0 0
2021-01-04 0 0 1 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.