gpt4 book ai didi

python - 基于现有列值的新列

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:01 24 4
gpt4 key购买 nike

尝试根据现有列“Temp”值创建新值 ChillFrozen

Temp 包含如下值:

-18.00C
-20.00C
+10.00C
+19.00C
Nan
DRY

如何使用 Pandas 实现它

df = pd.DataFrame({'Temp': ['-18.00C', '+10.00c', 'NaN', 'DRY']})

如果温度<0.0C,则将属于卡住
如果 Temp > 0.0C,则属于 Chill
如果Temp是“Nan”或“DRY”,它将属于NA

预期结果:

Temp_Category
Frozen
Chill
NA
NA

最佳答案

您可以提取第一个值和 Series.map通过字典,但数字之前始终需要值 +-

df = pd.DataFrame({'Temp': ['-18.00C', '+10.00c', 'NaN', 'DRY', '+0c', '20c']})

d = {'-':'Frozen', '+':'Chill'}
df['new1'] = df['Temp'].str[0].map(d)

另一个想法是提取数值,转换为float并使用numpy.sign但如果有 0 输出也是 0,所以输出是 NaN:

pat = r"([-+]?\d*\.\d+|\d+)"
d1 = {1:'Chill', -1:'Frozen', 0:'Chill'}
df['new2'] = np.sign(df['Temp'].str.extract(pat, expand=False).astype(float)).map(d1)

具有 2 条件和 numpy.select 的解决方案:

pat = r"([-+]?\d*\.\d+|\d+)"
s = df['Temp'].str.extract(pat).astype(float)
df['new3'] = np.select([s >= 0, s < 0], ['Chill','Frozen'], default=np.nan)

如果温度中只有最后一个值是非数字(例如 cC),则可以使用 to_numeric通过索引删除最后一个字符:

s = pd.to_numeric(df['Temp'].str[:-1], errors='coerce')
df['new4'] = np.select([s >= 0, s < 0], ['Chill','Frozen'], default=np.nan)
print (df)
Temp new1 new2 new3 new4
0 -18.00C Frozen Frozen Frozen Frozen
1 +10.00c Chill Chill Chill Chill
2 NaN NaN NaN nan nan
3 DRY NaN NaN nan nan
4 +0c Chill Chill Chill Chill
5 20c NaN Chill Chill Chill

关于python - 基于现有列值的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55771869/

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