我有一个数据帧,看起来是这样的:

dict = {'companyId': {0: 198236, 1: 198236, 2: 900814, 3: 153421, 4: 153421, 5: 337815},
 'region': {0: 'Europe', 1: 'Europe', 2: 'Asia-Pacific', 3: 'North America', 4: 'North America', 5:'Africa'},
 'value': {0: 560, 1: 771, 2: 964, 3: 217, 4: 433, 5: 680},
 'type': {0: 'actual', 1: 'forecast', 2: 'actual', 3: 'forecast', 4: 'actual', 5: 'forecast'}}

df = pd.DataFrame(dict)

    companyId     region          value  type
0   198236        Europe          560    actual
1   198236        Europe          771    forecast
2   900814        Asia-Pacific    964    actual
3   153421        North America   217    forecast
4   153421        North America   433    actual
5   337815        Africa          680    forecast

我似乎想不出一种方法来根据以下条件过滤某些行:

如果在相同的companyId下有两个条目,就像198236153421的情况一样,我只想保留typeactual的条目.

如果companyId以下只有一个条目,就像337815900814的情况一样,我希望保留该行,而不考虑列type中的值.

有谁知道该怎么做吗?

推荐答案

您可以使用GROUPBY和转换创建布尔索引:

#Your condition i.e. retain the rows which are not duplicated and those
# which are duplicated but only type==actual. Lets express that as a lambda.
to_filter = lambda x: (len(x) == 1) | ((len(x) > 1) & (x == 'actual'))

#then create a boolean indexing mask as below
m = df.groupby('companyId')['type'].transform(to_filter)


#then filter your df with that m:
df[m]:

   companyId         region  value      type
0     198236         Europe    560    actual
2     900814   Asia-Pacific    964    actual
4     153421  North America    433    actual
5     337815         Africa    680  forecast

Python相关问答推荐

螺旋桨图上意外颠倒的次y轴

带有Postgres的Flask-Data在调用少量API后崩溃

使用图片生成PDF Django rest框架

是什么导致对Python脚本的jQuery Ajax调用引发500错误?

Python panda拆分列保持连续多行

有什么方法可以避免使用许多if陈述

如何将ctyles.POINTER(ctyles.c_float)转换为int?

连接两个具有不同标题的收件箱

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

如何从具有不同len的列表字典中创建摘要表?

将pandas Dataframe转换为3D numpy矩阵

Python键入协议默认值

我们可以为Flask模型中的id字段主键设置默认uuid吗

numpy卷积与有效

如何获得每个组的时间戳差异?

运输问题分支定界法&

如何在Python中找到线性依赖mod 2

调用decorator返回原始函数的输出

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

在Google Drive中获取特定文件夹内的FolderID和文件夹名称