问题描述
我想知道从以下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())