我希望将3列中的5种不同的字符串值转换为3列中的数字值。
Columns:
1_month, 6_month, 12_month
Possible Values:
High
Above Average
Average
Below Average
Low
I'd like to create 3 new columns:
1_month_int, 6_month_int, 12_month_int
Then map the numerics from the string values as:
High = 5
Above Average = 4
Average = 3
Below Average = 2
Low = 1
我尝试过复制列,然后查找并替换单个列的值,然后在完成后将列类型更改为数字。它有效,但仅适用于1列:
df['1_month_int'] = df['1_month']
df['1_month_int'].replace("High",5, inplace=True)
df['1_month_int'].replace("Above Average",4, inplace=True)
df['1_month_int'].replace("Average",3, inplace=True)
df['1_month_int'].replace("Below Average",2, inplace=True)
df['1_month_int'].replace("Low",1, inplace=True)
df['1_month_int'] = pandas.to_numeric(df['1_month_int'])
我无法一次将其用于多个列:
df['1_month_int'] = df['1_month']
df['6_month_int'] = df['6_month']
df['12_month_int'] = df['12_month']
df[['3_month_int', '6_month_int', '12_month_int']/
.replace("High",5, inplace=True)
etc..
我相信有更好的方法。
我对熊猫很陌生,并且正在努力学习如何思考和解决这样的问题。
如果能在正确的方向上为在熊猫中处理此类数据的最佳实践提供帮助,我将不胜感激。
答案 0 :(得分:0)
Series.map
。import pandas as pd
df = pd.DataFrame({
'1_month':['High', 'Above Average'], '6_month':['Average','Below Average'], '12_month':['Low','Low']
})
map_ = {'High' : 5,'Above Average' : 4,'Average' : 3,'Below Average' : 2,'Low' : 1}
for c in df.columns:
df[c+'_int'] = df[c].map(lambda x: map_[x])
df
1_month 6_month 12_month 1_month_int 6_month_int 12_month_int
0 High Average Low 5 3 1
1 Above Average Below Average Low 4 2 1
答案 1 :(得分:0)
您可以使用系列的映射功能将值映射到给定的数字,如下所示
import numpy as np
import pandas as pd
values = ["High",
"Above Average",
"Average",
"Below Average",
"Low", ]
mapper = {key: i+1 for i, key in enumerate(values[::-1])}
columns = "1_month,6_month,12_month".split(",")
df = pd.DataFrame(np.random.choice(values,(10,3)), columns=columns)
for col in columns:
df[f"{col}_int"] = df[col].map(mapper)
display(df)