【问题标题】:Get grouped informations from an array with Pandas使用 Pandas 从数组中获取分组信息
【发布时间】:2019-04-09 01:31:02
【问题描述】:

我有一个结构如下的数据集:

"Date","Time","Open","High","Low","Close","Up","Down","Volume"
01/03/2000,00:05,1481.50,1481.50,1481.00,1481.00,2,0,0.00
01/03/2000,00:10,1480.75,1480.75,1480.75,1480.75,1,0,1.00
01/03/2000,00:20,1480.50,1480.50,1480.50,1480.50,1,0,1.00
[...]
03/01/2018,11:05,2717.25,2718.00,2708.50,2709.25,9935,15371,25306.00
03/01/2018,11:10,2709.25,2711.75,2706.50,2709.50,8388,8234,16622.00
03/01/2018,11:15,2709.25,2711.50,2708.25,2709.50,4738,4703,9441.00
03/01/2018,11:20,2709.25,2709.50,2706.00,2707.25,3609,4685,8294.00

我是这样读这个文件的:

rows = pd.read_csv("Datasets/myfile.txt")

我想用 pandas 获取此信息:对于每一天(如此分组),获取“Open”的第一个值、“Close”的最后一个值、“High”的最高值和“Low”的较低值",以及体积的总和。

我知道如何处理一些 for cicle,但这是一种非常低效的方法。与熊猫有几行可能吗?

谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用groupbyagg

    df.groupby('Date').agg({
        'Close': 'last',
        'Open': 'first',
        'High': 'max',
        'Low': 'min',
        'Volume': 'sum'
    })
    

    输出:

                Close   Open    High    Low     Volume
    Date                    
    01/03/2000  1480.50 1481.50 1481.5  1480.5  2.0
    03/01/2018  2707.25 2717.25 2718.0  2706.0  59663.0
    

    【讨论】:

    • @gyx-hh,这是一个很棒的答案+1
    • 我将标记为正确答案。谢谢老兄。另一个子问题。这种分组方法,以一种奇怪的方式排序日期。有什么方法可以按时间顺序排序?
    • @Steve 你可以对索引进行排序....sort_index()。但它应该按升序自动执行此操作
    • 是的,但是 01/01/2015 之后不是 01/02/2015 而是 01/01/2016!这是数字排序,不是日期排序!我想进行日期排序
    • 检查您的日期格式.. 如果需要,将其转换为日期时间。使用 pd.to_datetime()
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2017-12-27
    • 2019-10-03
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多