从字符串数字的Pandas列表返回最大整数值

np8igboo  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(159)

我有一个如下的df,其中df ['value_list']有dtype对象:

value_list  
0             ['200000.00', '100.00', '25.00']                 
1                       ['860000.00']                          
2                  ['148000.00', '25.00']

我想要一个新的列max_value这将是最大整数数值的字符串号码内这个名单。所以预期结果为以上:

value_list                              max_value
0             ['200000.00', '100.00', '25.00']                 200000
1                       ['860000.00']                          860000
2                  ['148000.00', '25.00']                      148000

我做了什么:

# covert strings to numerical values
df['value_list'] = df['value_list'].apply(lambda x: ast.literal_eval(x))
# get max values from list and if list is empty temporarily assign -1
df['max_value'] = df['value_list'].apply(lambda x: max(x) if len(x) >= 1 else -1)
df['max_value'] = df['max_value'].apply(lambda x: round(float(x)) if x != -1 else None)

这似乎是工作,但我没有真正得到最大值。我得到的结果:

value_list                              max_value
0             ['200000.00', '100.00', '25.00']                  25
1                       ['860000.00']                          860000
2                  ['148000.00', '25.00']                       25

有没有更好更正确的方法来做这件事?请指教。

g6ll5ycj

g6ll5ycj1#

一种方法是:

import pandas as pd

# input toy data 
df = pd.DataFrame([[['200000.00', '100.00', '25.00']],
                   [['860000.00']],
                   [['148000.00', '25.00']]], columns=["value_list"])

df["max_value"] = df["value_list"].apply(lambda x: max(float(e) for e in x))
print(df)

产出

value_list  max_value
0  [200000.00, 100.00, 25.00]   200000.0
1                 [860000.00]   860000.0
2          [148000.00, 25.00]   148000.0

如果你有空的列表并且想要返回-1,只需执行以下操作:

df["max_value"] = df["value_list"].apply(lambda x: max(float(e) for e in x) if x else -1)

相关问题