如何解决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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。