我有以下資料框。
df = pd.DataFrame({'vin':['aaa','bbb','bbb','bbb','ccc','ccc','ddd','eee','eee','fff'],'module':['NORMAL','1ST_PRIORITY','2ND_PRIORITY','HELLO','3RD_PRIORITY','2ND_PRIORITY','2ND_PRIORITY','3RD_PRIORITY','HELLO','ABS']})
我想查找 vin 列是否包含唯一值,然后在 Result 列中它應該回傳“YES”,如果 vin 列不是唯一的,那么它將檢查“module”列并回傳“YES”模塊列有更優先的價值。
我想要像下面的資料框這樣的輸出。
df = pd.DataFrame({'vin':['aaa','bbb','bbb','bbb','ccc','ccc','ddd','eee','eee','fff'],'module':['NORMAL','1ST_PRIORITY','2ND_PRIORITY','HELLO','3RD_PRIORITY','2ND_PRIORITY','2ND_PRIORITY','3RD_PRIORITY','HELLO','ABS'],
'Result':['YES','YES','NO','NO','NO','YES','YES','YES','NO','YES']})
下面的代碼,我已經嘗試過了,它給出了正確的結果,但它涉及的步驟太多。
df['count'] = df.groupby('vin').vin.transform('count')
def Check1(df):
if (df["count"] == 1):
return 1
elif ((df["count"] != 1) & (df["module"] == '1ST_PRIORITY')):
return 1
elif ((df["count"] != 1) & (df["module"] == '2ND_PRIORITY')):
return 2
elif ((df["count"] != 1) & (df["module"] == '3RD_PRIORITY')):
return 3
else:
return 4
df['Sort'] = df.apply(Check1, axis=1)
df = df.sort_values(by=['vin', 'Sort'])
df.drop_duplicates(subset=['vin'], keep='first',inplace = True)
df
uj5u.com熱心網友回復:
這是訣竅,你需要一個custom order:
from pandas.api.types import CategoricalDtype
#create your custom order
custom_order = CategoricalDtype(
['Delhi','Agra','Paris','ABS','HELLO','NORMAL'],
ordered=True)
#then attribute it to the desired column
df['module'] = df['module'].astype(custom_order)
df['Result'] = ((~df.sort_values('module', ascending=True).duplicated('vin'))
.replace({True: 'YES', False: 'NO'}))
結果:
| 指數 | 葡萄酒 | 模塊 | 結果 |
|---|---|---|---|
| 0 | 啊啊啊 | 普通的 | 是的 |
| 1 | bbb | 德里 | 是的 |
| 2 | bbb | 阿格拉 | 不 |
| 3 | bbb | 你好 | 不 |
| 4 | ccc | 巴黎 | 不 |
| 5 | ccc | 阿格拉 | 是的 |
| 6 | ddd | 阿格拉 | 是的 |
| 7 | eee | 巴黎 | 是的 |
| 8 | eee | 你好 | 不 |
| 9 | fff | ABS | 是的 |
uj5u.com熱心網友回復:
IIUC,你可以duplicated在之后使用sort_values:
df['Result'] = ((~df.sort_values('module').duplicated('vin'))
.replace({True: 'YES', False: 'NO'}))
print(df)
# Output
vin module Result
0 aaa NORMAL YES
1 bbb 1ST_PRIORITY YES
2 bbb 2ND_PRIORITY NO
3 bbb HELLO NO
4 ccc 3RD_PRIORITY NO
5 ccc 2ND_PRIORITY YES
6 ddd 2ND_PRIORITY YES
7 eee 3RD_PRIORITY YES
8 eee HELLO NO
9 fff ABS YES
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486570.html
標籤:Python 熊猫 数据框 熊猫-groupby
