String pandas:获取具有字符串编号的列表的最大值
我有一个数据帧String pandas:获取具有字符串编号的列表的最大值,string,pandas,list,max,String,Pandas,List,Max,我有一个数据帧df=pd.dataframe({'xx':[[100','5','3'],['5','40'],['100']})并且我希望每个列表的最大值作为一个数字。所以我想得到这个: xx 0 100 1 40 2 100 有没有办法做到这一点?将值转换为整数并获取max值: df['xx'] = df['xx'].map(lambda x: max(int(y) for y in x)) 或使用列表理解: df['xx'] = [max(int(y) for y in x
df=pd.dataframe({'xx':[[100','5','3'],['5','40'],['100']})
并且我希望每个列表的最大值作为一个数字。所以我想得到这个:
xx
0 100
1 40
2 100
有没有办法做到这一点?将值转换为整数并获取
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']]
添加另一个pandas方法,使用将列表系列分解为1个系列,然后使用convert to int,然后使用max按索引分组:
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
如果要使用,可以使用:
df.assign(max_xx=lambda x: [max(map(int, l)) for l in x.xx])
谢谢。有没有办法用assign实现这一点?我尝试了
df.assign(zz=lambda x:max(map(int,x.xx))
@corianne1234是的,您可以使用df.assign
,如果这有用,您可以向上投票或接受,谢谢!我尝试了这一点(如上),但我得到一个错误TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“list”
。所以它不工作。你从jupyter运行吗?@corianne1234如果你从jupyter运行,你只需要运行一次单元,你可能需要重新启动内核。这很好。这也适用于assigndf.assign(zz=lambda x:x.xx.explode().astype(int).max(level=0))
。谢谢lot@corianne1234很高兴我能帮忙:)再问一个问题,如果你有一个列表,其中有一个非数值,你能把它设置为np.nan吗?可能是np.where()?@corianne1234在找到max之前?然后:pd.to_numeric(df['xx'].explode(),errors='concurve').max(level=0)。astype(int)
?如果max是一个float,则省略astype(int)
perfect,是的。谢谢
df['max_xx'] = df['xx'].apply(lambda x: max(map(int, x)))
df['max_xx']
0 100
1 40
2 100
df.assign(max_xx=lambda x: [max(map(int, l)) for l in x.xx])