如何筛选DataFrame列?以及按日期筛选并汇总对应金额?
问题解答
1. 如何筛选DataFrame中的列?
在Julia的DataFrames包中,有多种灵活的列筛选方式:
- 直接指定列名:通过列名符号或字符串选择,支持单列/多列:
# 选择单列 df[:, :time] df.time # 选择多列 df[:, [:time, :amount]] df[:, ["time", "amount"]] - 使用
select函数:支持正则匹配、类型筛选等进阶操作:# 选择指定列 select(df, :time, :amount) # 匹配列名包含特定字符的列(例如匹配含"am"的列) select(df, r"am") # 选择所有Float64类型的列 select(df, Float64) - 排除指定列:用
Not关键字剔除不需要的列:# 排除time列 select(df, Not(:time)) df[:, Not(:time)]
2. 筛选某天金额并求和
不需要遍历小时,直接通过日期匹配即可筛选当天所有记录,再求和。
解决方法
假设数据已读取完成,可按以下步骤操作:
using DataFrames, CSV, Dates # 读取数据 df = CSV.read(path, DataFrame) # 筛选1942-01-01的所有记录 target_date = Date(1942, 1, 1) daily_records = filter(row -> Date(row.time) == target_date, df) # 对当天金额求和 total = sum(daily_records.amount)
也可以合并为一行简洁代码:
total = sum(df.amount[Date.(df.time) .== Date(1942, 1, 1)])
你的代码问题说明
当前循环遍历小时的方式存在两个问题:
- 每次
filter生成的结果未保存,循环结束后无有效输出; - 无需逐个小时筛选,只需判断
time字段的日期部分等于目标日期,就能覆盖当天0到24点的所有记录,逻辑更高效。
如果需要批量计算每天的金额总和,可使用groupby+combine:
daily_totals = combine(groupby(df, Date.(df.time)), :amount => sum => :daily_total)
内容的提问来源于stack exchange,提问作者Mike Computer
相关产品推荐
相关产品推荐

