簡體   English   中英

將pandas數據框基於另一個數據框分為兩個數據框

[英]Split pandas dataframe into two dataframes based on another dataframe

我嘗試在Stackoverflow上搜索該問題的答案,盡管有類似的答案,但我嘗試調整已接受的答案,但我正努力實現所需的結果。

我有一個數據框:

df = pd.DataFrame({'Customer':
                     ['A', 'B', 'C', 'D'],
                          'Sales':
                     [100, 200, 300, 400],
                          'Cost':
                     [2.25, 2.50, 2.10, 3.00]})

還有一個:

split = pd.DataFrame({'Customer':
                 ['B', 'D']})

我想從原始數據幀df創建兩個新的數據幀,一個包含來自拆分數據幀的數據,另一個包含不在拆分中的數據。 我需要df的原始結構保留在兩個新創建的數據框中。

我已經研究過isin,merge,drop和loops,但是必須有一種優雅的方法來解決簡單的問題?

使用帶有boolean indexing Series.isin進行過濾, ~用於反向boolean indexing掩碼:

mask = df['Customer'].isin(split['Customer'])

df1 = df[mask]
print (df1)
  Customer  Sales  Cost
1        B    200   2.5
3        D    400   3.0

df2 = df[~mask]
print (df2)
  Customer  Sales  Cost
0        A    100  2.25
2        C    300  2.10

另一個解決方案,如果需要將多個列與DataFrame.merge匹配(如果所有列on任何參數都沒有DataFrame.merge ),也可以使用,請使用帶有indicator參數的外部DataFrame.merge

df4 = df.merge(split, how='outer', indicator=True)
print (df4)
  Customer  Sales  Cost     _merge
0        A    100  2.25  left_only
1        B    200  2.50       both
2        C    300  2.10  left_only
3        D    400  3.00       both

並再次使用不同的掩碼進行過濾:

df11 = df4[df4['_merge'] == 'both']
print (df11)
  Customer  Sales  Cost _merge
1        B    200   2.5   both
3        D    400   3.0   both

df21 = df4[df4['_merge'] == 'left_only']
print (df21)
  Customer  Sales  Cost     _merge
0        A    100  2.25  left_only
2        C    300  2.10  left_only

暫無
暫無

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

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