gpt4 book ai didi

python - 如何在 Pandas 中创建新列?

转载 作者:行者123 更新时间:2023-12-02 18:39:41 24 4
gpt4 key购买 nike

我需要在 pandas 数据框中创建新列。

df 

Id Value
1 >45%
2 >29%
3 <30 to >69
4 >40% to <56%
5 --

df_输出:

Id    Value         Value2
1 >45% 45%
2 >29% 29%
3 <30 to >69 69
4 >40% to <56% 56%
5 -- NaN

在我的数据框中有一个名为“值”的列,我需要在该列顶部创建新列“Value2”。在 Value2 列中,我只需要一个基于值列的带后缀的数字(如果存在于值列中)。如果有多个数字,例如 Id 3&4,我需要其中最大的一个。

我尝试过:

df.Value.str.extract('(\d+)')

但它只提取数字。

最佳答案

你可以使用

import pandas as pd
import numpy as np
import re

df = pd.DataFrame({'Value':['>45%', '<30 to >69', '<80% and >16%', '...']})
def lookup(x):
m = list(re.finditer(r'(\d+(?:\.\d+)?)\s*%?', x))
if m:
return max(m, key=lambda x: float(x.group(1)))[0]
else:
return np.nan

df['Value2'] = df['Value'].apply(lookup)
# >>> df
# Value Value2
# 0 >45% 45%
# 1 <30 to >69 69
# 2 <80% and >16% 80%
# 3 ... NaN

详细信息:

  • re.finditer ,获取 (\d+(?:\.\d+)?)\s*%? 的所有匹配项提取一个或多个数字的模式,后跟可选的 . 序列和一位或多位数字(将此值捕获到组 1 中),然后是可选的 %标志
  • lookup(x)方法返回np.NaN如果没有找到匹配项,则返回包含第 1 组中最大数字的匹配值。

正则表达式详细信息:

  • (\d+(?:\.\d+)?) - 第 1 组:一个或多个数字后跟一个可选的 .和一位或多位数字(整数或 float )
  • \s* - 零个或多个空格
  • %? - 可选%标志

请参阅regex demo .

关于python - 如何在 Pandas 中创建新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68179870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com