簡體   English   中英

Pandas 的 Output 兩個數據幀的合並不會產生預期的形狀

[英]Output of a Pandas Merge of two data frames does not produce the expected shape

我正在使用“左合並”合並兩個數據幀,但是,output 中的行數不等於左數據幀中的行數。 我期望 df_bd 的形狀為 (58233, 10)。

在此處輸入圖像描述

執行 Join 時必須重復,例如:

import pandas as pd
left_data = {'name':['John','Mark'],'value':[1,5]}
right_data = {'name':['John','Mark','John','Mark'],'children':['Celius','Stingher','Celius','Stingher'],'process_date':['2019-02-05','2019-02-05','2019-03-05','2019-03-05']}
left_df = pd.DataFrame(left_data)
right_df = pd.DataFrame(right_data)
right_df['process_date'] = pd.to_datetime(right_df['process_date'])

它們是這樣的:

print(left_df)
   name  value
0  John      1
1  Mark      5
print(right_df)
       name  children process_date
0  John    Celius   2019-02-05
1  Mark  Stingher   2019-02-05
2  John    Celius   2019-03-05
3  Mark  Stingher   2019-03-05

即使由於right_df中有多個process_date值而left合並,因此left dataframe 將被復制,以適合right dataframe 傳遞的所有值。

    df = left_df.merge(right_df,how='left',left_on='name',right_on='name')
    print(df)
   name  value  children process_date
0  John      1    Celius   2019-02-05
1  John      1    Celius   2019-03-05
2  Mark      5  Stingher   2019-02-05
3  Mark      5  Stingher   2019-03-05

過濾它的一種方法是.sort_values()按特定順序,然后.drop_duplicates(subset=list(left_df),keep={'last','first'}) 通過這種方式,我們消除了重復行並保留了最新的可用信息:

df = df.sort_values('process_date',ascending=True).drop_duplicates(list(left_df),keep='last')
print(df)
   name  value  children process_date
1  John      1    Celius   2019-03-05
3  Mark      5  Stingher   2019-03-05

合並 dataframe 的長度,匹配left_df的長度。

暫無
暫無

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

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