从列中的字符串中提取每行的最大值
Posted
技术标签:
【中文标题】从列中的字符串中提取每行的最大值【英文标题】:Extracting Max value along each row from strings in column 【发布时间】:2019-07-23 13:25:47 【问题描述】:我在 DataFrame 中有一列字符串,其中包含逗号分隔的数字。我需要从字符串中提取每一行的最大值。返回的最大值应该是从开始到第 13 个索引的最大值。
我尝试使用“,”作为分隔符拆分字符串,以将其转换为启用扩展选项的列表。然后我使用 Pandas 的 assign 方法沿纵轴求最大值。
sample_dt1 = sample_dt['pyt_hist'].str.split(',', expand=True).astype(float)
sample_dt = sample_dt.assign(max_value=sample_dt1.max(axis=1))
样本数据:
index pyt_hist
0 0,0,0,0,0,0,0,0,0,0,0
1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2 0,0,0,360,420,392,361,330,300,269,239,208,177
3 0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,23,0,0,56,0
预期结果:
index pyt_hist max_value
0 0,0,0,0,0,0,0,0,0,0,0 0
1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0
2 0,0,0,360,420,392,361,330,300,269,239,208,177 420
3 0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,23,0,0,56,0 0
使用我的代码获得的结果:
index pyt_hist max_value
0 0,0,0,0,0,0,0,0,0,0,0 0.0
1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0.0
2 0,0,0,360,420,392,361,330,300,269,239,208,177 420.0
3 0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,23,0,0,56,0 56.0
【问题讨论】:
【参考方案1】:您非常接近,sample_dt1.iloc[:,:13]
为您提供sample_dt1
的前 13 列。所以你可以这样做:
sample_dt = sample_dt.assign(max_value=sample_dt1.iloc[:,:13].max(axis=1))
【讨论】:
【参考方案2】:df.pyt_hist.str.split(',').apply(lambda x: max([int(i) for i in x[:13] if i]))
输出
0 0
1 0
2 420
3 0
Name: pyt_hist, dtype: int64
【讨论】:
由于int(i)
,我收到以下错误:ValueError: invalid literal for int() with base 10: ''
如果我使用i*1
而不是int(i)
,那么对于字符串150,150,150,150,150,150,90,90,90,90,90,90,90,90,90,90,90,0,0,60,0,0,0,0,60,60,60,0,0,60,60,60,60,60,60,60
,它会返回90
而不是@ 987654329@
列表中是否有任何空值,对于上面使用相同代码的示例,我也得到了 90..
我在列表中看不到任何空值。但是,为了避免这种情况,我如何过滤或去除空值以使您的代码适用于所有情况?
在某些情况下它现在会抛出错误:ValueError: max() arg is an empty sequence
列表不为空。它是字符串列表,包含“无”,这些没有被转换为数字。另外,而不是前 12 个元素的最大值,我怎样才能从右侧获得最大的 1st 3 个元素?以上是关于从列中的字符串中提取每行的最大值的主要内容,如果未能解决你的问题,请参考以下文章