我有一个数据框df=pd.DataFrame({'xx':[['100','5','3'], ['5','40'], ['100']]})
,我希望将每个列表的最大值作为一个数字。所以我想得到这个:
xx
0 100
1 40
2 100
有没有办法做到这一点?
答案 0 :(得分:1)
将值转换为整数并获得max
值:
df['xx'] = df['xx'].map(lambda x: max(int(y) for y in x))
或使用列表理解:
df['xx'] = [max(int(y) for y in x) for x in df['xx']]
print(df)
xx
0 100
1 40
2 100
答案 1 :(得分:1)
使用series.explode
添加另一种pandas方法将一系列列表分解为1个序列,然后使用series.astype
转换为int,然后采用按索引分组的最大值:
df['max_col'] = df['xx'].explode().astype(int).max(level=0)
#or:-> df['xx'].explode().astype(int).groupby(level=0).max()
0 100
1 40
2 100
答案 2 :(得分:0)
您可以使用pandas.Series.apply:
df['max_xx'] = df['xx'].apply(lambda x: max(map(int, x)))
df['max_xx']
输出:
0 100
1 40
2 100
如果您想使用pandas.DataFrame.assign,可以使用:
df.assign(max_xx=lambda x: [max(map(int, l)) for l in x.xx])