替换产品销售的地方< 20表示python Dataframe的类似组中的销售额的平均值

时间:2018-05-09 04:51:51

标签: python pandas dataframe

我想要归咎于列#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行]。

2 个答案:

答案 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