python - 按 ID 分组并对一列的值应用条件

标签 python pandas dataframe jupyter-notebook

我是 pandas 库的新手,非常感谢您的帮助。 这是我的输入

<表类=“s-表”> <标题> ID 日期 标签 库存 <正文> AA 2020年1月26日 正确 100 AA 2020年1月27日 错误 200 BB 2020年1月28日 错误 300 BB 2020年1月29日 正确 500 BB 2020年1月30日 错误 100 抄送 2020年1月26日 正确 200 抄送 2020年1月27日 错误 300 抄送 2020年1月28日 错误 100 抄送 2020年1月29日 正确 400

我想查看“标签”列,对于为每个 ID 找到的第一个“TRUE”标签,我需要将库存值复制到新列中。如果一个 ID 有多个 TRUE,我只需要考虑第一个。

这是我想要获得的输出:

<表类=“s-表”> <标题> ID 日期 标签 库存 新 <正文> AA 2020年1月26日 正确 100 100 AA 2020年1月27日 错误 200 BB 2020年1月28日 错误 300 BB 2020年1月29日 正确 500 500 BB 2020年1月30日 错误 100 抄送 2020年1月26日 正确 200 200 抄送 2020年1月27日 错误 300 抄送 2020年1月28日 错误 100 抄送 2020年1月29日 正确 400

感谢您的帮助!

最佳答案

另一个版本,使用.groupby():

m = df.index.isin(
    df[df["LABEL"] == True].reset_index().groupby("ID").index.first()
)
df.loc[m, "NEW"] = df.loc[m, "STOCK"]
print(df)

打印:

   ID        DATE  LABEL  STOCK    NEW
0  AA  01/26/2020   True    100  100.0
1  AA  01/27/2020  False    200    NaN
2  BB  01/28/2020  False    300    NaN
3  BB  01/29/2020   True    500  500.0
4  BB  01/30/2020  False    100    NaN
5  CC  01/26/2020   True    200  200.0
6  CC  01/27/2020  False    300    NaN
7  CC  01/28/2020  False    100    NaN
8  CC  01/29/2020   True    400    NaN

关于python - 按 ID 分组并对一列的值应用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67291004/

相关文章:

Python限定组合

python - 循环列表的两种方式 - 区别

python - p4 需要等效的 python 命令 describe

python - df.iloc 未在 For 循环中赋值? ( Pandas )

r - 使用辅助 data.frame dplyr R 合并两个 data.frames

Python DSP,自动增益控制(AGC)

python - 如何将多个 Unix 时间戳转换为 Pandas 日期时间?

python - 仅具有高亮值的 matplotlib 条形图

python - 如何计算 pandas 数据框中一系列单元格中 2 个值以内的单元格?

python - Pandas Groupby 并使用自定义值创建新列