2 回答

TA貢獻1828條經(jīng)驗 獲得超6個贊
非循環(huán)解決方案numpy.where
:
df['new_col'] = np.where(df.index.str[0].str.isalpha() &
? ? ? ? ? ? ? ? ? ? ? ? ?~df.index.str.startswith("I0"), 'P', 'C')
您的解決方案 -x[0]從中刪除x[0].startswith("I0")- 它測試第一個值,如果不是I0,則始終是True:
df['new_col'] = ['P' if (x[0].isalpha() and not x.startswith("I0"))? ?
? ? ? ? ? ? ? ? ? ? ?else 'C' for x in df.index]
測試:
df = pd.DataFrame({'A': {'AA00001': 1.3253365856660808,
? 'I00002': 1.6147800817881086,
? 'IR0003': 1.1414534979918203,
? '00004': 0.9183004454646491,
? '**00005': 1.1896061362142527,
? 'I00007': 0.46638312473267185}}
)
df['new_col'] = np.where(df.index.str[0].str.isalpha() &
? ? ? ? ? ? ? ? ? ? ? ? ?~df.index.str.startswith("I0"), 'P', 'C')
df['new_col1'] = ['P' if (x[0].isalpha() and not x.startswith("I0"))? ?
? ? ? ? ? ? ? ? ? ? ? else 'C' for x in df.index]
print (df)
? ? ? ? ? ? ? ? A new_col new_col1
**00005? 1.189606? ? ? ?C? ? ? ? C
00004? ? 0.918300? ? ? ?C? ? ? ? C
AA00001? 1.325337? ? ? ?P? ? ? ? P
I00002? ?1.614780? ? ? ?C? ? ? ? C
I00007? ?0.466383? ? ? ?C? ? ? ? C
IR0003? ?1.141453? ? ? ?P? ? ? ? P

TA貢獻1780條經(jīng)驗 獲得超5個贊
您正在檢查x[0].startswith("I0")
您的代碼,這是不正確的嘗試這個(檢查x.startswith("I0")
)
df['new_col'] = ['P' if (x[0].isalpha() and not x.startswith("I0")) else 'C' for x in df.index]
添加回答
舉報