从具有最低值的熊猫列中选择值

Posted

技术标签:

【中文标题】从具有最低值的熊猫列中选择值【英文标题】:Choosing values from pandas column with the lowest value 【发布时间】:2021-12-05 09:03:53 【问题描述】:

我正在从 csv 读取 df,其中有 2 列显示各种项目的价格。在某些情况下,价格是单个 int/float,但在其他情况下,它可能是一系列空格分隔的 int/floats 或 int/floats 与字符串的混合。

示例 df:

  item            prices            
 ------ --------------------------- 
  a      2                          
  b      3.5                        
  c      5                          
  d      0.04                       
  e      1 8 3 4 2                  
  f      0.04 0.04 0.01             
  g      Normal: 4.56Premium: 4.75  

我正在寻找的是一种很好的 Python 方法,可以让价格列显示每个项目的最低可能 int/float 值。例如

  item   prices  
 ------ -------- 
  a           2  
  b         3.5  
  c           5  
  d        0.04  
  e           1  
  f        0.01  
  g        4.56  

我能想到解决项目 e 和 f 的这个问题的唯一方法是使用 str.split(" ") 拆分值并将输出映射到 int 或 float,但这似乎会很混乱,因为并非所有值是相同的类型。而且我什至不知道如何获得项目 g 的最低值。

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

使用Series.str.extractall 获取integers 或floats,转换为浮点数并获取最小值:

df['prices'] = (df['prices'].str.extractall('(\d+\.\d+|\d+)')[0]
                            .astype(float)
                            .groupby(level=0)
                            .min())
print (df)


  item  prices
0    a    2.00
1    b    3.50
2    c    5.00
3    d    0.04
4    e    1.00
5    f    0.01
6    g    4.56

【讨论】:

没有这部分也可以工作[0].astype(float)。你能告诉你为什么要特别添加[0]部分。 @MuhammadHassan - 当然,如果使用[0],则返回系列,否则返回一列DataFrame。在这里没关系。

以上是关于从具有最低值的熊猫列中选择值的主要内容,如果未能解决你的问题,请参考以下文章

如何从特定小时范围内的行中选择最小值?

从熊猫数据框中提取在特定列中具有特定值的所有行

熊猫选择列中的值不以字符串开头的行

熊猫根据索引标签选择特定列中的值[重复]

选择最近的时间戳行并从具有 Variant DataType 的列中获取值

如何使用熊猫对与给定条件匹配的列中的值求和?