按月计算特定值

Counting Specific Values by Month

我有一些数据想按月统计。我想要计数的列具有三个不同的可能值,每个值代表不同的售出汽车。这是我的数据框的示例:

Date                        Type_Car_Sold
2015-01-01 00:00:00                2
2015-01-01 00:00:00                1
2015-01-01 00:00:00                1
2015-01-01 00:00:00                3
...                               ...

我想做到这一点,所以我有一个数据框,可以分别按月计算每种特定车型的销量,所以看起来像这样:

Month       Car_Type_1        Car_Type_2        Car_Type_3         Total_Cars_Sold
1               15                12                17                     44
2                9                18                20                     47
...             ...              ...                ...                    ...

我究竟该怎么做呢?我试过:

cars_sold = car_data['Type_Car_Sold'].groupby(car_data.Date.dt.month).agg('count')

但这只是汇总了当月售出的所有汽车,而不是按每种车型的总销量进行细分。有什么想法吗?

也许不是最干净的解决方案,但这应该让你非常接近

import pandas as pd
from datetime import datetime

df = pd.DataFrame({
    "Date": [datetime(2022,1,1), datetime(2022,1,1), datetime(2022,2,1), datetime(2022,2,1)],
    "Type": [1, 2, 1, 1],
})

df['Date'] = df["Date"].dt.to_period('M')
df['Value'] = 1

print(pd.pivot_table(df, values='Value', index=['Date'], columns=['Type'], aggfunc='count'))
Type       1    2
Date             
2022-01  1.0  1.0
2022-02  2.0  NaN

或者,您也可以将多列传递给 groupby:

import pandas as pd
from datetime import datetime

df = pd.DataFrame({
    "Date": [datetime(2022,1,1), datetime(2022,1,1), datetime(2022,2,1), datetime(2022,2,1)],
    "Type": [1, 2, 1, 1],
})

df['Date'] = df["Date"].dt.to_period('M')
df.groupby(['Date', 'Type']).size()
Date     Type
2022-01  1       1
         2       1
2022-02  1       2
dtype: int64

这似乎具有排除零值键的不幸副作用。此外,结果是多索引行,而不是将索引作为行+列。

有关此方法的更多信息,请查看 this question