我有一个数据帧,比如

    id      occurence    status
0   1       1            validated
1   2       1            validated
2   3       1            validated
3   1       10       

关联[id,ocurence]是唯一的,这意味着我将只有一个组合[1,1]或[1,10]. 具有出现10的行将始终被添加到具有出现1的行之后的数据帧上.

每次看到出现10的新行时,我要做的是判断是否存在具有相同id和出现1的另一行,然后从行[id,1]中提取状态,并相应地更新行[id,10]的状态.

现在,我可以像这样提取副本

df[df['id'].duplicated(keep=False)]

它返回一个包含所有重复项的数据帧,但我不知道如何 Select 第一个事件的状态值……

我也try 了这样的东西:

df.groupby('id').transform(lambda x: x.update({'status': 'validated'})开始是一个静态值,但它给了我一个没有填充的数据帧……

你知道这件事吗?

谢谢

推荐答案

您可以将DataFrames与merge对齐:

m1 = df['occurence'].eq(10)
m2 = df['occurence'].eq(1)

df.loc[m1, 'status'] = (df[['id', 'occurence']]
       .merge(df[m2].assign(occurence=10),
              on=['id', 'occurence'], how='left')
       .loc[m1, 'status']
      )

输出:

   id  occurence     status
0   1          1  validated
1   2          1  validated
2   3          1  validated
3   1         10  validated

Python相关问答推荐

Python上的Instagram API:缺少client_id参数"

未删除映射表的行

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

用合并列替换现有列并重命名

如何使用它?

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

迭代嵌套字典的值

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

使用groupby方法移除公共子字符串

lityter不让我输入左边的方括号,'

在输入行运行时停止代码

(Python/Pandas)基于列中非缺失值的子集DataFrame

Cython无法识别Numpy类型

如何在Python请求中组合多个适配器?

判断Python操作:如何从字面上得到所有decorator ?

来自Airflow Connection的额外参数

read_csv分隔符正在创建无关的空列

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

如何在python tkinter中绑定键盘上的另一个回车?

Sknowled线性回归()不需要迭代和学习率作为参数