簡體   English   中英

將兩個 pandas 數據幀與兩個條件結合起來

[英]Combine two pandas dataframes with two conditionals

我有兩個 pandas 數據幀,我想將它們與兩個條件的檢查結合起來。

數據框1:

import pandas as pd 
data = [['Z085', '2020-08', 1.33], ['Z086', '2020-08', 1.83], ['Z086', '2020-09', 1.39]] 
df1 = pd.DataFrame(data, columns = ['SN', 'Date', 'Value']) 

在此處輸入圖像描述

數據框2:

data = [['Z085', '2020-08', 0.34], ['Z085', '2020-09', 0.83], ['Z086', '2020-09', 0.29]] 
df2 = pd.DataFrame(data, columns = ['SN', 'Date', 'ValueX']) 
df2 

在此處輸入圖像描述

我想合並或 append 或加入它們以獲得以下 dataframe:如果“SN”和“Date”相等,則添加值(“Value”和“ValueX”)。

在此處輸入圖像描述

我不確定,如果需要新的 dataframe 或 map,df2 到 df1。

這是我試過的:

df1['ValueX'] = df1[('Date', 'SN')].map(df2_mean.set_index('Date', 'SN')['ValueX'])

使用一個條件(例如:日期)它可以正常工作,但我無法設置兩個條件。

這只是一個merge()操作。 不要將列稱為“條件”,只需說“在 SN、日期列上合並”。

但是 pandas (v1.1.4) 有一個錯誤(它的默認設置是在進行排序時使用相反的鍵順序,即“升序”)所以你不能依賴它; 請注意下面它按“日期”然后“SN”排序,即錯誤的方式:

>>> dfnew_bad = df1.merge(df2, on=['SN','Date'], how='outer')

     SN     Date  Value  ValueX
0  Z085  2020-08   1.33    0.34
1  Z086  2020-08   1.83     NaN
2  Z086  2020-09   1.39    0.29
3  Z085  2020-09    NaN    0.83

所以在你的情況下通過 SN 然后 Date 獲得正確的訂單

dfnew_good = df1.merge(df2, on=['SN','Date'], how='outer', sort=False).sort_values(['SN', 'Date'])
     SN     Date  Value  ValueX
0  Z085  2020-08   1.33    0.34
3  Z085  2020-09    NaN    0.83
1  Z086  2020-08   1.83     NaN
2  Z086  2020-09   1.39    0.29

請注意,有一個標志.sort_values(ascending=True)但不是pd.merge()您也可以通過執行pd.merge(..., sort=False)然后dfnew_workaround.sort_index(..., inplace=True)來解決

方法一: merge

df_new = df1.merge(df2, on=['SN','Date'],how='outer', sort=True)
print(df_new)

方法二: join

df_new = df1.join(df2.set_index(['SN','Date']), on=['SN','Date'],how='outer', sort=True)
print(df_new)

在這種情況下,另一種可能的方法是使用pd.concat

df_new = pd.concat([df1.set_index(['SN','Date']),df2.set_index(['SN','Date'])],axis=1).reset_index()

Output 在任何一種情況下

     SN     Date  Value  ValueX
0  Z085  2020-08   1.33    0.34
3  Z085  2020-09    NaN    0.83
1  Z086  2020-08   1.83     NaN
2  Z086  2020-09   1.39    0.29

暫無
暫無

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

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