我有一個像這樣的元組串列(PRODUCT_ID,COUNTRY_CODE):
[(1111, 'CO'),
(2222, 'CO'),
(1111, 'BR')]
和這樣的資料框:
df = pd.DataFrame({
'COUNTRY_CODE': ['CO','CO','CO','BR','BR','BR','CO'],
'VERTICAL_GROUP_ID': [2,2,3,2,3,3,3],
'SUB_VERTICAL': ['SUPER','SUPER','HOME','LICOR','SPORTS','HOME','TECH'],
'PRODUCT_ID': [1111,3333,1111,4444,1111,2222,2222],
'SHOWN': [7,8,12,14,16,1,13],
})
如何過濾資料框,以便獲得這樣的結果資料框,僅使用 PRODUCT_ID 和 COUNTRY_CODE 元組串列中的值進行過濾?
| 國家代碼 | VERTICAL_GROUP_ID | SUB_VERTICAL | PRODUCT_ID | 顯示 |
|---|---|---|---|---|
| 一氧化碳 | 2 | 極好的 | 1111 | 7 |
| 一氧化碳 | 3 | 家 | 1111 | 12 |
| BR | 3 | 運動的 | 1111 | 16 |
| 一氧化碳 | 3 | 技術 | 2222 | 13 |
uj5u.com熱心網友回復:
讓我們使用Multiindex.isin
df[df.set_index(['PRODUCT_ID', 'COUNTRY_CODE']).index.isin(tup)]
或者,您可以從元組創建一個新的資料框,然后與給定的資料框進行內部合并
filters = pd.DataFrame(tup, columns=['PRODUCT_ID', 'COUNTRY_CODE'])
df.merge(filters)
COUNTRY_CODE VERTICAL_GROUP_ID SUB_VERTICAL PRODUCT_ID SHOWN
0 CO 2 SUPER 1111 7
1 CO 3 HOME 1111 12
2 BR 3 SPORTS 1111 16
3 CO 3 TECH 2222 13
uj5u.com熱心網友回復:
您可以zip兩列:PRODUCT_ID和COUNTRY_CODE并檢查值是否在lists中tuple并回傳所需的df。
lst = [(1111, 'CO'),(2222, 'CO'),(1111, 'BR')]
m = [tpl in lst for tpl in zip(df['PRODUCT_ID'], df['COUNTRY_CODE'])]
# m -> [True, False, True, False, True, False, True]
df_new = df[m]
print(df_new)
輸出:
COUNTRY_CODE VERTICAL_GROUP_ID SUB_VERTICAL PRODUCT_ID SHOWN
0 CO 2 SUPER 1111 7
2 CO 3 HOME 1111 12
4 BR 3 SPORTS 1111 16
6 CO 3 TECH 2222 13
解釋:
>>> tuple(zip(df['PRODUCT_ID'], df['COUNTRY_CODE']))
((1111, 'CO'), # True : in [(1111, 'CO'),(2222, 'CO'),(1111, 'BR')]
(3333, 'CO'), # False : Not in [(1111, 'CO'),(2222, 'CO'),(1111, 'BR')]
(1111, 'CO'),
(4444, 'BR'),
(1111, 'BR'),
(2222, 'BR'),
(2222, 'CO'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524021.html
標籤:Python熊猫
上一篇:從包含字典串列的字典中繪制值
