Python数据处理求助:按时间范围求和及数值分箱统计
Python数据集处理问题解决方案
1. 代码报错修复
你的代码报错为NameError: name 'df' is not defined,原因是lambda表达式里误用了未定义的变量df,需替换为实际的DataFrame名称BM。同时要复制原数据避免修改原始数据集,修正后的代码如下:
import pandas as pd # 先确保交易日期为datetime格式(必须步骤) BM['transaction_date'] = pd.to_datetime(BM['transaction_date']) EndDate = BM['transaction_date'] + pd.to_timedelta(20, unit='D') StartDate = BM['transaction_date'] # 复制原数据,避免修改原始数据集 dfx = BM.copy() dfx['EndDate'] = EndDate dfx['StartDate'] = StartDate # 修正变量名错误,将df改为BM dfx['20day_debit_sum'] = dfx.apply(lambda x: BM.loc[ (BM['transaction_date'] >= x['StartDate']) & (BM['transaction_date'] <= x['EndDate']), 'Debit' ].sum(), axis=1)
如果数据集较大,上述apply方法效率极低,推荐使用更高效的交叉连接分组求和方案:
import pandas as pd BM['transaction_date'] = pd.to_datetime(BM['transaction_date']) # 添加索引用于后续分组匹配 BM['idx'] = BM.index # 生成所有基准日期与交易日期的组合 cross_df = pd.merge( BM[['idx', 'transaction_date']].rename(columns={'transaction_date': 'base_date'}), BM[['transaction_date', 'Debit']], how='cross' ) # 筛选基准日期后20天内的交易记录 cross_df = cross_df[ (cross_df['transaction_date'] >= cross_df['base_date']) & (cross_df['transaction_date'] <= cross_df['base_date'] + pd.to_timedelta(20, 'D')) ] # 按基准索引分组计算20天内Debit总和 debit_sum = cross_df.groupby('idx')['Debit'].sum().reset_index(name='20day_debit_sum') # 合并回原数据 BM = BM.merge(debit_sum, on='idx').drop('idx', axis=1)
2. 数值区间划分与次数统计
根据需求定义区间,对Debit和Credit进行分组,并统计各区间出现次数:
# 定义区间边界与标签(排除4001-4999、8001-8999的数值) bins = [1999, 4000, 4999, 8000, 8999, 20000] interval_labels = ['2000-4000', '5000-8000', '9000-20000'] # 为Debit划分区间 BM['debit_interval'] = pd.cut( BM['Debit'], bins=bins, labels=interval_labels, include_lowest=True # 包含左边界2000 ) # 为Credit划分区间 BM['credit_interval'] = pd.cut( BM['Credit'], bins=bins, labels=interval_labels, include_lowest=True ) # 统计Debit各区间出现次数 debit_interval_counts = BM['debit_interval'].value_counts().reset_index(name='count') # 统计Credit各区间出现次数 credit_interval_counts = BM['credit_interval'].value_counts().reset_index(name='count')
3. 结果整合
你可以将20天Debit总和、区间划分结果合并到原数据集中,或单独提取统计结果,匹配预期输出格式。
内容的提问来源于stack exchange,提问作者mp.kaur
相关产品推荐
相关产品推荐

