You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选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)])

你的代码问题说明

当前循环遍历小时的方式存在两个问题:

  1. 每次filter生成的结果未保存,循环结束后无有效输出;
  2. 无需逐个小时筛选,只需判断time字段的日期部分等于目标日期,就能覆盖当天0到24点的所有记录,逻辑更高效。

如果需要批量计算每天的金额总和,可使用groupby+combine:

daily_totals = combine(groupby(df, Date.(df.time)), :amount => sum => :daily_total)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:05:26