从列中的字符串中提取每行的最大值

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 个元素?

以上是关于从列中的字符串中提取每行的最大值的主要内容,如果未能解决你的问题,请参考以下文章

从列中的最大 id 创建 HSQL 序列

Python - 从列中提取/复制分隔文本到新列 xlsx

从列中查找最大值并选择它们的行

Google BigQuery 使用 regexp_extract 从列中提取字符串

从列中提取日期并在 R 中缺少年份时添加年份

Sqlite3 从列中具有相似值的行获取数据