从数据帧中删除和为z的行

2024-09-27 21:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经删除了公司对给定的period不收取任何费用的行(例如,revenue==0的行)。在

以下是计费数据的示例:

import numpy as np
import pandas as pd

data = {
    'account_id': ['111','111','222','333','666','666','111','222','333','666','666'],
    'company': ['initech','initech','jackson steinem & co','ingen','enron','enron','initech','jackson steinem & co','ingen','enron','enron'],
    'billing_type': ['subscription','discount','subscription','subscription','subscription','discount','subscription','subscription','subscription','subscription','discount'],
    'period': ['2012-10-31','2012-10-31','2012-10-31','2012-10-31','2012-10-31','2012-10-31','2012-11-30','2012-11-30','2012-11-30','2012-11-30','2012-11-30'],
    'revenue':[39.95,-39.95,199.95,299.95,499.95,-499.95,39.95,199.95,299.95,499.95,-499.95]
}
df = pd.DataFrame(data)
df['period'] = pd.to_datetime(df['period'],format='%Y-%m-%d')

这将产生如下数据帧:

^{pr2}$

{{cd2{cd2}需要做的是什么。例如,我需要删除安然的所有行,但只删除Initech的2012年10月期间:

In [17]: df.groupby(['company','period'])['revenue'].sum()
Out[17]:
company               period
enron                 2012-10-31      0.00
                      2012-11-30      0.00
ingen                 2012-10-31    299.95
                      2012-11-30    299.95
initech               2012-10-31      0.00
                      2012-11-30     39.95
jackson steinem & co  2012-10-31    199.95
                      2012-11-30    199.95

一个otherpostsnumber解决了类似的情况,我还没有找到任何能确切帮助/解释如何完成这个请求的东西。在


Tags: importdfasdiscountcompanysubscriptionperiodpd
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:29

您可以使用^{}制作一个帧大小的遮罩,然后使用它来选择:

>>> keep = df.groupby(["company", "period"])["revenue"].transform(sum) != 0
>>> df.loc[keep]
  account_id  billing_type               company     period  revenue
2        222  subscription  jackson steinem & co 2012-10-31   199.95
3        333  subscription                 ingen 2012-10-31   299.95
6        111  subscription               initech 2012-11-30    39.95
7        222  subscription  jackson steinem & co 2012-11-30   199.95
8        333  subscription                 ingen 2012-11-30   299.95

这是因为transform获取groupby结果并将其“广播”回主索引:

^{pr2}$

相关问题 更多 >

    热门问题