![](/img/trans.png)
[英]Split dataframe into 6 dataframes based on values in another dataframe
[英]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.