我想要归咎于列#34; Sales"在数据帧事务中(在Python中)。即替换产品销售的地方< 20与其相应类别和品牌的销售额的平均值。
例如,我的数据在以下结构中:
Category,Brand,Sales
Food , pp , 100
Food , pp , 200
Food , pp , 10
Cream , xy , 40
Cream , xy , 2
Cream , xy , 60
第3行的销售(食品和pp),即10应该用食品和PP组中的所有销售额的平均值替换,即100 + 200/2 = 150 [不包括第3行包含销售额为10] 。 同样适用于第5行,即2应该用Cream和xy的销售额代替,即(60 + 40)/ 2 = 50 [不包括第5行]。
答案 0 :(得分:3)
对于与原始mean
大小相同的每组过滤值,df
使用a = df.groupby(['Category','Brand'])['Sales'].transform(lambda x: x[x >= 20].mean())
df['Sales'] = np.where(df['Sales'] < 20, a, df['Sales'])
,因此可以通过transform
条件替换:
a = df[df['Sales']>= 20].groupby(['Category','Brand'])['Sales'].mean()
b = df.drop('Sales', 1).join(a, on=['Category','Brand'])['Sales']
df['Sales'] = np.where(df['Sales'] < 20, b, df['Sales'])
替代解决方案:
print (df)
Category Brand Sales
0 Food pp 100
1 Food pp 200
2 Food pp 150
3 Cream xy 40
4 Cream xy 50
5 Cream xy 60
<select name="first" id="first_select">
<option value="" selected>Select an Option</option>
<option value="all">Select All</option>
<option value="Sno">Sno</option>
<option value="name">Name</option>
<option value="course">Mauza</option>
</select>
答案 1 :(得分:1)
也试试这个,
df.loc[df['Sales']<20,'Sales']=np.NaN
df['Sales']=df.groupby(['Category'])['Sales'].apply(lambda x: x.fillna(x.mean()))
输出
Category Brand Sales
0 Food pp 100.0
1 Food pp 200.0
2 Food pp 150.0
3 Cream xy 40.0
4 Cream xy 50.0
5 Cream xy 60.0