簡體   English   中英

基於兩個不同列數的DataFrame創建二進制pandas DataFrame

[英]Create binary pandas DataFrame based on two DataFrames with different number of columns

我有兩個DataFrames df1df2 ,其中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用於多個第一個DataFrameSeries

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM