簡體   English   中英

合並兩個數據框並減少列數

[英]merging two dataframes and reducing the number of columns

我有兩個數據框,df_dates,df_ratios。 兩個數據幀具有相同的尺寸 150 x 4。兩者都有一個作為安全 ID 的列,並且該列在兩個數據幀中是相同的。

df_dates
id     col1       col2       col3        col4
1sds   nan        nan        20200108    nan
bhu6   20190404   nan        nan         nan
lm55   nan        nan        20200623    20201215
bn34   nan        nan        nan         nan


df_ratios
id     col1       col2       col3        col4
1sds   nan        nan        1.34        nan
bhu6   2.6        nan        nan         nan
lm55   nan        nan        0.23        0.45
bn34   nan        nan        nan         nan

我需要的如下所示。 基本上,在 df_dates 中有日期的地方,在 df_ratios 中會有一個相應的數字,我想將它們對齊在一起,並且忽略任何 nan。 我知道如何解決這個問題的唯一方法是簡單地遍歷數據幀中的每一行和每一列並應用一些簡單的邏輯。 我想知道在熊貓中是否有更有效的方法?

df_result
id     dates      ratios
1sds   20200108   1.34
bhu6   20190404   2.6
lm55   20200623   0.23        
lm55   20201215   0.45       

如果DataFrames絕對對齊,則可以使用set_indexstackconcat

(pd.concat([df_dates.set_index('id').stack().rename('dates'),
            df_ratios.set_index('id').stack().rename('ratios')], axis=1)
 .reset_index(level=0).reset_index(drop=True))

[出去]

     id       dates  ratios
0  1sds  20200108.0    1.34
1  bhu6  20190404.0    2.60
2  lm55  20200623.0    0.23
3  lm55  20201215.0    0.45

國際大學聯盟,

如果您的結果排序正確,我們可以融化和連接。

new_df = pd.concat([
    pd.melt(df1, id_vars="id",value_name='month').drop("variable", axis=1),
    pd.melt(df2, id_vars="id",value_name='ratio').drop(["variable","id"], axis=1)
],
axis=1
).dropna()

print(new_df)

      id       month    ratio  
1   bhu6  20190404.0   2.60
8   1sds  20200108.0   1.34
10  lm55  20200623.0   0.23
14  lm55  20201215.0   0.45

您可以從每個數據框中創建單獨的Series對象,然后在索引上合並。

s1 = df_dates.set_index('id').stack().astype(int)
s2 = df_ratios.set_index('id').stack()

s1.name = 'dates'
s2.name = 'ratios'

pd.merge(s1, s2, left_index=True, right_index=True).reset_index(level=0)
# returns:
        id     dates  ratios
col3  1sds  20200108    1.34
col1  bhu6  20190404    2.60
col3  lm55  20200623    0.23
col4  lm55  20201215    0.45

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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