[英]Returning a max integer value from a pandas list of string numbers
我有一個像這樣的 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
有沒有更好更正確的方法來做到這一點? 請指教。
一種方法:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.