Pandas DataFrame上特定于组的计算

问题描述

我想知道从以下DataFrame价格中减去特定于品牌的平均价格的最优雅/最蟒蛇的方法是什么。

换句话说,我要创建第二个列,该列等于Apple产品的原始价格减去1200,并等于Lenovo产品的原始价格减去700。

  public static function sendToDifferentApp($message,$headings,$tags,$data){

   $contents = array(
       "en" => $message
   );

   $params = array(
       'app_id' => env('ONESIGNAL_SECOND_APP_ID'),'contents' => $contents,'filters' => $tags,'api_key' => env('ONESIGNAL_SECOND_APP_REST_API_KEY'),);

   if (isset($data)) {
       $params['data'] = $data;
   }

   if(isset($headings)){
       $params['headings'] = array(
           "en" => $headings
       );
   }

   OneSignal::sendNotificationCustom($params);

在此先感谢您的帮助!

解决方法

您可以从价格中减去均值分组,以创建一个名为Price_Diff_Mean的新列。使用.transform('mean')为列price创建一系列长度相同的值,并从price中减去这些值:

df['Price_Diff_Mean'] = df['price'] - df.groupby('brand')['price'].transform('mean')
df
Out[6]: 
       product   brand  price  Price_Diff_Mean
0      macbook   Apple   1000             -200
1  macbook air   Apple   1200                0
2  macbook pro   Apple   1400              200
3    thinkbook  Lenovo    600             -100
4     thinkpad  Lenovo    800              100

或者,您可以在.assign中添加一列,这将为您提供相同的结果:

df = df.assign(Price_Diff_Mean = df['price'] - df.groupby('brand')['price'].transform('mean'))
,

在我看来,这是一种更为优雅的方式:

df['newcolumn'] = df.groupby('brand').transform(lambda x: x - x.mean())

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...