我目前有以下问题正在努力解决.具有许多数字列的数据帧,该数据帧由充当ID的"SERIAL_NUMBER"列组成.列"UPDATE"为True或False.还有一些我需要用以下内容求和/除以的数值列:求和/除以行为"UPDATE"=FALSE的所有数值列到"UPDATE"为True的下一行(包括"UPDATE"=True的行.

为了给您一个额外的上下文,这些条目用于训练机器学习模型,但是对于"UPDATE"=FALSE的行,我没有目标变量.因此,我需要对下一个"UPDATE"=TRUE行的值求和或取平均值.

提前谢谢!

例如,下面是输入表:

serial_number model numerical_mean numerical_1_sum numerical_2_sum update
a 2023-01-01 5 10 20 False
a 2023-01-02 10 15 10 False
a 2023-01-03 15 15 10 True
b 2023-01-01 10 15 10 False
b 2023-01-02 15 15 10 True
b 2023-01-03 15 15 10 False
b 2023-01-04 15 15 10 True
b 2023-01-05 15 15 10 False
c 2023-01-04 15 15 10 True

生成的输出应如下所示:

serial_number date numerical_mean numerical_1_sum numerical_2_sum update
a 2023-01-03 10 40 40 True
b 2023-01-02 12.5 30 20 True
b 2023-01-04 15 30 20 True
c 2023-01-04 15 15 10 True

输出表的行数与输入表中"UPDATE"=True的行数相同.因此,基本上,我try 获取第一个"UPDATE"=FALSE和第一个"UPDATE"=TRUE行之间相同序列号内的所有行,并将它们相加或取平均值.

推荐答案

代码

# filter the columns that you would like to aggregate
c1 = df.filter(like='_sum')
c2 = df.filter(like='_mean')

# create a agg dictionary which maps column names
# to the corresponding aggregation functions
agg_dict = {
    'model': 'last', 
    'update': 'any',
    **dict.fromkeys(c1, 'sum'), 
    **dict.fromkeys(c2, 'mean'),
}

# grouper to identify different blocks of rows followed by True
b = df[::-1]['update'].cumsum()

# group the dataframe by serial_number and blocks and aggregate
result = df.groupby(['serial_number', b]).agg(agg_dict)

# Query the results to remove the rows that do 
# not have any subsequent rows with 'update=true',
# for example, (b, 2023-01-05).
result = result.droplevel(1).query('update').reset_index()

结果

  serial_number       model  update  numerical_1_sum  numerical_2_sum  numerical_mean
0             a  2023-01-03    True               40               40            10.0
1             b  2023-01-04    True               30               20            15.0
2             b  2023-01-02    True               30               20            12.5
3             c  2023-01-04    True               15               10            15.0

Python相关问答推荐

如何使用symy打印方程?

滚动和,句号来自Pandas列

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

Polars:用氨纶的其他部分替换氨纶的部分

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

Pandas Data Wrangling/Dataframe Assignment

使用特定值作为引用替换数据框行上的值

巨 Python :逆向猜谜游戏

在用于Python的Bokeh包中设置按钮的样式

如何反转一个框架中列的值?

解决Geopandas和Altair中的正图和投影问题

504未连接IB API TWS错误—即使API连接显示已接受''

来自Airflow Connection的额外参数

Pythonquests.get(Url)返回Colab中的空内容

Matplotlib中的曲线箭头样式

将像素信息写入文件并读取该文件

极点用特定值替换前n行

普洛特利express 发布的人口普查数据失败

如何计算Pandas 中具有特定条件的行之间的天差