2017-10-19 35 views
0

我一直在尋找解決這個問題,所有的答案似乎並沒有工作,所以我決定要求在這個特定用例的幫助。我正在合併兩個具有不同維度的csv,但共享兩個相同的列。我第一次放在CSV的成大熊貓數據幀看起來是這樣的:熊貓刪除重複行時合併兩個CSV的不同尺寸

df_td和df_ld:

>>> df_td.head(2) 
    trans_id store_num cust_id    bus_date   type 
0 0000001  104 111111 10/5/2017 12:00:00 AM  Payment 
1 0000002  104 111111 10/5/2017 12:00:00 AM  Payment 
2 0000003  104 111111 10/5/2017 12:00:00 AM  Received 



>>> df_ld.head(2) 
    cust_id nxt_date store_num amt_received   type_rec 
0 111111 11/5/2017  104   10.00   NaN 
1 111112 11/6/2017  104   10.00   NaN 

運行此代碼後:

merged = pd.merge(df_td, df_ld, how='inner', on=['cust_id','store_num']).fillna(0) 

我有這樣的合併數據框:

>>> df_td_ld.head(3) 
    trans_id store_num cust_id    bus_date   type nxt_date amt_received type_rec 
0 0000001  104 111111 10/5/2017 12:00:00 AM  Payment 11/5/2017   10.00  NaN 
1 0000002  104 111111 10/5/2017 12:00:00 AM  Payment 11/5/2017   10.00  NaN 
2 0000003  104 111111 10/5/2017 12:00:00 AM  Received 11/5/2017   10.00  NaN 

正如你所看到的,我得到了df_ld列中的dups,因爲cust_id 111111只出現一次帽子數據框。如果我試着這樣查詢並求和該列,那麼它將在該日期報告30.00而不是正確的10.00,對於該商店中的那個顧客。我嘗試過outerleft,right以及concatjoin函數,但要麼得到相同的輸出,要麼完全錯誤。

我想是這樣的:

trans_id store_num cust_id    bus_date   type nxt_date amt_received type_rec 
0 0000001  104 111111 10/5/2017 12:00:00 AM  Payment 11/5/2017    0  NaN 
1 0000002  104 111111 10/5/2017 12:00:00 AM  Payment 11/5/2017    0  NaN 
2 0000003  104 111111 10/5/2017 12:00:00 AM  Received 11/5/2017   10.00  NaN 

是否與MERG /加盟/ Concat的,這是可行的方法嗎? 謝謝!

+0

這可能幫助:http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.drop_duplicates.html –

回答

1

您可以不只是在合併後將amt_received的所有適用值設置爲0嗎?

merged = pd.merge(df_td, df_ld, how='inner', on=['cust_id','store_num']) 
merged.loc[merged.type_y != 'Received','amt_received'] = 0 

    cust_id nxt_date store_num amt_received type_x trans_id bus_date type_y 
0 111111 11/5/2017 104   0.0      1  10/5/2017 Payment 
1 111111 11/5/2017 104   0.0      2  10/5/2017 Payment 
2 111111 11/5/2017 104   10.0     3  10/5/2017 Received 
+0

彌敦道感謝您的回覆。我喜歡你的思考過程,因此我在這個週末度過了這個週末。我遇到的問題是我的實際數據框在type_y下有更多的狀態。因此,我的原始數據框中沒有列出的與狀態類型無關的某些項目將被清零。我很抱歉沒有添加這個,因爲我希望在pd.merge函數中缺少一個參數。是否有另一種可能的方式去處理你的建議,以避免這些子狀態類型? –

+0

這工作雖然我無法找到一個簡單的方法來處理子狀態類型,所以我需要將其分解成單獨的行。 –

+0

@Falken教授,如果你發佈了更多的數據例子,我應該可以幫你解決這個問題。你能給我舉一些你的意思嗎? –