如何将Pandas DataFrame同日期数值除以对应日期的计数值
实现方法
你操作失败主要有两个核心原因:
values_df的val字段和count表的count字段都是字符串类型,无法直接做数值除法运算- 新增count列时没有按日期字段做关联匹配,导致无法自动填充同日期的count值
可以直接用Pandas的merge左连接实现同日期count值自动匹配,再做除法计算,完整代码如下:
import pandas as pd # 构造原始数据 values_df = pd.DataFrame({'date': ['2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16', '2021-08-16','2021-08-16', '2021-08-16'], 'val': ['0.38956', '0.733198', '0.1856580', '-0.759235', '0.112378', '0.7436924' , '0.32941900', '0.7423981', '0.71269175', '0.127698146']}) # 这里把count改名为count_df,避免和Python内置count函数冲突 count_df = pd.DataFrame({'date': ['2021-08-16', '2021-08-17', '2021-08-18', '2021-08-19', '2021-08-20', '2021-08-21', '2021-08-22', '2021-08-23','2021-08-24', '2021-08-25'], 'count': ['12', '47', '85', '65', '36', '126' , '75', '85', '175', '63']}) # 1. 转换字符串类型为数值类型 values_df['val'] = values_df['val'].astype(float) count_df['count'] = count_df['count'].astype(int) # 2. 按date字段左连接,自动填充同日期的count值 values_df = values_df.merge(count_df, on='date', how='left') # 3. 执行除法得到最终结果 values_df['val'] = values_df['val'] / values_df['count'] # 不需要count字段可以删除 # values_df.drop(columns=['count'], inplace=True)
如果后续values_df出现count_df里不存在的日期,对应计算结果会返回空值,你可以根据业务需要补充默认值。
内容的提问来源于stack exchange,提问作者Woox
相关产品推荐
相关产品推荐

