Dan*_*ish 1 python pandas scikit-learn sklearn-pandas
我有一个如下所示的数据框
Price Category Area
20 Red 100
30 Red 150
10 Red 50
25 Red NaN
30 Red NaN
10 Green 30
20 Green 60
30 Green 90
10 Green 30
40 Green NaN
50 Green NaN
Run Code Online (Sandbox Code Playgroud)
综上所述,我想分别估计每个类别红色和绿色的面积和价格之间的关系。
例如这里的红色:
Area = 5 * Price
Run Code Online (Sandbox Code Playgroud)
同样对于绿色:
Area = 3 * Price
Run Code Online (Sandbox Code Playgroud)
我想将其实现到 pandas 和 scikit-learn 中:
步骤 1. 估计每个类别的面积和价格之间的关系。2. 基于关系估算缺失值。
我在 python 和编码方面很新。
Expected output
Price Category Area
20 Red 100
30 Red 150
10 Red 50
25 Red 125
30 Red 150
10 Green 30
20 Green 60
30 Green 90
10 Green 30
40 Green 120
50 Green 150
Run Code Online (Sandbox Code Playgroud)
您还可以使用如下字典,然后堆叠和填充:
d={'Area_Red' : 5 * df['Price'] , 'Area_Green' : 3 * df['Price']}
df_ref=pd.DataFrame(d).rename(columns=lambda x: x.split('_')[1]).stack()
df['Area']=df.set_index('Category',append=True)['Area'].fillna(df_ref).droplevel(1)
Run Code Online (Sandbox Code Playgroud)
如果您只想获取值df_ref并更新Areacol(不仅仅是fillna),请将最后一行更改为下面,使用df.lookup:
d={'Area_Red' : 5 * df['Price'] , 'Area_Green' : 3 * df['Price']}
df_ref=pd.DataFrame(d).rename(columns=lambda x: x.split('_')[1]) #without stack
df['Area']=df_ref.lookup(df['Category'].index,df['Category'])
Run Code Online (Sandbox Code Playgroud)
print(df)
Price Category Area
0 20 Red 100
1 30 Red 150
2 10 Red 50
3 25 Red 125
4 30 Red 150
5 10 Green 30
6 20 Green 60
7 30 Green 90
8 10 Green 30
9 40 Green 120
10 50 Green 150
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30 次 |
| 最近记录: |