pandas - Groupby 两列其中一列是日期时间

标签 pandas dataframe datetime

我有一个数据框,我想按两列分组,其中一列是日期时间类型。我该怎么做?

import pandas as pd 
import datetime as dt 

df = pd.DataFrame({ 


'a':np.random.randn(6),
'b':np.random.choice( [5,7,np.nan], 6),
'g':{1002,300,1002,300,1002,300}
'c':np.random.choice( ['panda','python','shark'], 6),

# some ways to create systematic groups for indexing or groupby
# this is similar to r's expand.grid(), see note 2 below
'd':np.repeat( range(3), 2 ),
'e':np.tile(   range(2), 3 ),

# a date range and set of random dates
'f':pd.date_range('1/1/2011', periods=6, freq='D'),
'g':np.random.choice( pd.date_range('1/1/2011', periods=365, 
                      freq='D'), 6, replace=False) 
})

最佳答案

您可以使用 pd.Grouper指定 groupby 指令。它可以与 pd.DatetimeIndex 索引一起使用,使用 freq 参数对具有指定频率的数据进行分组。

假设您有这个数据框:

df = pd.DataFrame(dict(
    a=dict(date=pd.Timestamp('2020-05-01'), category='a', value=1),
    b=dict(date=pd.Timestamp('2020-06-01'), category='a', value=2),
    c=dict(date=pd.Timestamp('2020-06-01'), category='b', value=6),
    d=dict(date=pd.Timestamp('2020-07-01'), category='a', value=1),
    e=dict(date=pd.Timestamp('2020-07-27'), category='a', value=3),
)).T

您可以将索引设置为date 列,它会被转换为pd.DatetimeIndex。然后您可以将 pd.Grouper 与其他列一起使用。对于以下示例,我使用 category 列。

freq='M' 参数用于使用月份频率对索引进行分组。有数量 string data series aliases可以在 pd.Grouper

中使用
df.set_index('date').groupby([pd.Grouper(freq='M'), 'category'])['value'].sum()

结果:

date        category
2020-05-31  a           1
2020-06-30  a           2
            b           6
2020-07-31  a           4
Name: value, dtype: int64

你的 mcve 的另一个例子:

df.set_index('g').groupby([pd.Grouper(freq='M'), 'c']).d.sum()

结果:

g           c     
2011-01-31  panda     0
2011-04-30  shark     2
2011-06-30  panda     2
2011-07-31  panda     0
2011-09-30  panda     1
2011-12-31  python    1
Name: d, dtype: int32

关于pandas - Groupby 两列其中一列是日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611617/

相关文章:

python - matplotlib boxplot xticks 向 y 轴移动

python - 删除包含特定类型的数据帧行

python - 在另一个数据框中找到的句子中查找存储在数据框中的短语

python - Pandas - 根据索引替换值

Python datetime 到没有微秒组件的字符串

Python Pandas "no module named format"

scala - 如何从嵌套的结构元素数组创建 Spark DataFrame?

date - 如何在 Java 8 中使用 LocalDateTime 计算两个日期之间的时差?

java - 如何将 Calendar 对象设置为当前日期,但包含 HH :mm:ss 的 SimpleDateFormat 中的时间

python - 根据其他行的某些条件获取 pandas 行的内容