我有一些数据要按月计算。我想要计数的列有三个不同的可能值,每个值代表不同的售出汽车。下面是我的dataframe示例:
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')但这只是一个月内所有汽车销量的总和,而不是按每种车型的总销量进行分解。有什么想法吗?
发布于 2022-03-01 18:46:27
也许不是最干净的解决方案,但这会让你离得很近
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发布于 2022-03-02 13:44:04
或者,也可以将多个列传递给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这似乎有一个不幸的副作用,即排除零值的键。而且,结果是多索引行,而不是将索引作为rows+columns。
有关此方法的更多信息,请查看this question。
https://stackoverflow.com/questions/71313004
复制相似问题