按月计算特定值
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。
我有一些数据想按月统计。我想要计数的列具有三个不同的可能值,每个值代表不同的售出汽车。这是我的数据框的示例:
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。