有一個關于熊貓的問題:
我有兩個資料框:
df1 = pd.DataFrame({'user_id': ['12', '22', '33', '44'],
'time': ['t1', 't2', 't3', 't4'],
'data': [{'av': '8.0', 'si': 3, 'am' : 2}, {'av': '8.0', 'si': 44}, {'av': '8.0', 'si': 1}, {'av': '8.0', 'si': 22}]})
df2 = pd.DataFrame({'user_id': ['11', '22', '33', '44'],
'time': ['t1', 't2', 't3', 't4'],
'data': [{'cv': 'ff', 'si': 3}, {'cv': 'ff', 'si': 44}, {'cv': 'fa', 'si': 2}, {'cv': 'ff', 'si': 21}]})
我需要過濾 df1 以拒絕包含 'user_id' 和 ['data'].'si' 的值的行與 df2 行中的 'user_id' 和 ['data'].'si' 相同。如果我這樣做:
filter1 = df1['data'].str['si'].isin(df2['data'].str['si'])
filter2 = df1['user_id'].isin(df2['user_id'])
df3= df1[filter1 & filter2]
結果將無效,因為我需要完全拒絕行,其中值滿足兩個條件:例如來自 df1 的第 2 行
user_id time data
22 t2 'av': '8.0', 'si': 44
并從df2:
user_id time data
22 t2 'cv': 'ff', 'si': 44
非常感謝您的幫助!
uj5u.com熱心網友回復:
將資料歸一化應該可以更輕松、更清晰地簡化這一點以及每個潛在的比較。
標準化 應用清潔條件:
df1 = pd.concat([df1.drop(columns=['data']), pd.json_normalize(df1.data)], axis=1)
df2 = pd.concat([df2.drop(columns=['data']), pd.json_normalize(df2.data)], axis=1)
現在資料框如下所示:
df1:
| 用戶身份 | 時間 | 影音 | 西 | 是 | |
|---|---|---|---|---|---|
| 0 | 12 | t1 | 8 | 3 | 2 |
| 1 | 22 | t2 | 8 | 44 | 楠 |
| 2 | 33 | t3 | 8 | 1 | 楠 |
| 3 | 44 | t4 | 8 | 22 | 楠 |
df2:
| 用戶身份 | 時間 | 簡歷 | 西 | |
|---|---|---|---|---|
| 0 | 11 | t1 | ff | 3 |
| 1 | 22 | t2 | ff | 44 |
| 2 | 33 | t3 | F A | 2 |
| 3 | 44 | t4 | ff | 21 |
現在您可以讓它們合并并使用指示器,如下所示
df1_filtered = df1.merge(df2[['user_id', 'si']], how='outer', indicator=True)
df1_filtered = df1_filtered[df1_filtered._merge.eq('left_only')].drop(columns=['_merge'])
df1_filtered
| 用戶身份 | 時間 | 影音 | 西 | 是 | |
|---|---|---|---|---|---|
| 0 | 12 | t1 | 8 | 3 | 2 |
| 2 | 33 | t3 | 8 | 1 | 楠 |
| 3 | 44 | t4 | 8 | 22 | 楠 |
df2_filtered = df2.merge(df1[['user_id', 'si']], how='outer', indicator=True)
df2_filtered = df2_filtered[df2_filtered._merge.eq('left_only')].drop(columns=['_merge'])
print(df2_filtered.to_markdown())
| 用戶身份 | 時間 | 簡歷 | 西 | |
|---|---|---|---|---|
| 0 | 11 | t1 | ff | 3 |
| 2 | 33 | t3 | F A | 2 |
| 3 | 44 | t4 | ff | 21 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479477.html
