You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将DataFrame计数列按日期匹配合并至另一DataFrame并填充0?

解决方法:匹配日期并填充对应计数

你之前用isin的方式只能判断日期是否存在,没法拿到对应的Counts具体数值,正确的做法是用数据框合并或者映射关联的方式来实现,下面给你几种实用方案:

方法1:使用pandas.merge(推荐,逻辑清晰)

这是最直观的实现方式,通过左连接保留原df的所有行,再把缺失的计数填充为0:

# 先确保两个数据框的日期列类型统一(如果原本是字符串的话)
import pandas as pd
df['dates'] = pd.to_datetime(df['dates'])
dt2['just_dates'] = pd.to_datetime(dt2['just_dates'])

# 左连接,以df的日期为基准关联dt2的计数
merged_df = pd.merge(df, dt2, left_on='dates', right_on='just_dates', how='left')
# 把缺失的Counts填充为0,转成整数类型并重命名列
merged_df['counts'] = merged_df['Counts'].fillna(0).astype(int)
# 保留需要的最终列
final_df = merged_df[['dates', 'counts']]

这样就能得到你想要的结果:存在匹配日期的行填充对应Counts值,无匹配的行自动填0。

方法2:使用map映射(更简洁)

如果dt2里的日期没有重复,或者你已经对重复日期做过聚合处理,可以用字典映射的方式快速实现:

# 把dt2转换成「日期:计数」的字典
count_map = dt2.set_index('just_dates')['Counts'].to_dict()
# 用map匹配日期,无匹配的返回NaN,再填充为0
df['counts'] = df['dates'].map(count_map).fillna(0).astype(int)

如果dt2存在重复日期(比如同一个日期有多条计数记录),需要先对dt2按日期聚合(比如求和)再生成字典:

# 先对dt2的重复日期计数求和
dt2_agg = dt2.groupby('just_dates')['Counts'].sum().reset_index()
count_map = dt2_agg.set_index('just_dates')['Counts'].to_dict()
df['counts'] = df['dates'].map(count_map).fillna(0).astype(int)

为什么你的原代码无法实现需求?

df['dates'].isin(out['just_dates']).astype(int)本质是存在性判断,只会返回布尔值转换后的0或1,它不会去关联dt2里对应的Counts具体数值,所以没法拿到你需要的计数结果。


内容的提问来源于stack exchange,提问作者Dennis

火山引擎 最新活动