2 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
將 lambda 函數(shù)與 一起使用if-else,還添加了轉(zhuǎn)換為整數(shù)以確保正確max:
f = lambda x : max(int(y) for y in x) if isinstance(x, list) else np.nan
df['C'] = df['B'].apply(f)
print (df)
? ? ? ? ? ? ? ? ? ?A? ? ? ? ? ?B? ? ? ? C
0? ? ? ? ? ? ? 54321? ? ? ? ?NaN? ? ? NaN
1? ? ? ? it is 54322? ? ?[54322]? 54322.0
2? is it 54323 or 4?? [54323, 4]? 54323.0
3? ? ? ? ? ? ? ? NaN? ? ? ? ?NaN? ? ? NaN
或者使用Series.str.extractall
forMultiIndex
與 Convert toint
并使用max
每個(gè)第一級(jí):
df = pd.DataFrame({'A' : [54321, 'it is 54322', 'is it 54323 or 4?', np.NaN]})
df['C'] = df.A.astype(str).str.extractall('(\d+)').astype(int).max(level=0)
print (df)
? ? ? ? ? ? ? ? ? ?A? ? ? ? C
0? ? ? ? ? ? ? 54321? 54321.0
1? ? ? ? it is 54322? 54322.0
2? is it 54323 or 4?? 54323.0
3? ? ? ? ? ? ? ? NaN? ? ? NaN

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
另一個(gè)解決方案:
import re
df['B'] = df['A'].apply(lambda x: pd.Series(re.findall(r'\d+', str(x))).astype(float).max())
print(df)
印刷:
A B
0 54321 54321.0
1 it is 54322 54322.0
2 is it 54323 or 4? 54323.0
3 NaN NaN
添加回答
舉報(bào)