计算 pandas 数据框中的均值和标准差
Calculating mean and standard deviation in pandas dataframe
我有以下数据框:
COD CHM DATE
0 5713 0.0 2020-07-16
1 5713 1.0 2020-08-11
2 5713 2.0 2020-06-20
3 5713 3.0 2020-06-19
4 5713 4.0 2020-06-01
... ... ... ...
2135283 73306036 0.0 2020-09-30
2135284 73306055 12.0 2020-09-30
2135285 73306479 9.0 2020-09-30
2135286 73306656 3.0 2020-09-30
2135287 73306676 1.0 2020-09-30
我想计算整个日期(时间)内每个 COD 的均值和标准差。
为此,我正在做:
traf_user_chm_med =traf_user_chm_med.groupby(['COD', 'DATE'])['CHM'].sum().reset_index()
dates = pd.date_range(start=traf_user_chm_med.DATE.min(), end=traf_user_chm_med.DATE.max(), freq='MS', closed='left').sort_values(ascending=False)
clients = traf_user_chm_med['COD'].unique()
idx = pd.MultiIndex.from_product((clients, dates), names=['COD', 'DATE'])
M0 = pd.to_datetime('2020-08')
M1 = M0-pd.DateOffset(month=M0.month-1)
M2 = M0-pd.DateOffset(month=M0.month-2)
M3 = M0-pd.DateOffset(month=M0.month-3)
M4 = M0-pd.DateOffset(month=M0.month-4)
M5 = M0-pd.DateOffset(month=M0.month-5)
def filter_dates(grp):
grp.set_index('YEAR_MONTH', inplace=True)
grp=grp[M0:M5].reset_index()
return grp
traf_user_chm_med = traf_user_chm_med.groupby('COD').apply(filter_dates)
不确定为什么它不起作用,它 returns 是一个空数据框。
在此之后,我将在几个月内取消堆叠以获得 activity 并计算每个 COD 的平均值和标准偏差。
这是一个漫长的过程,不确定是否有更快的方法来获得我想要的值。
尽管如此,如果有人能帮助我使这个工作正常进行,那就太棒了!
如果我没理解错的话,你只是需要这个:
df.groupby("COD")["CHM"].agg("std")
作为一般原则,几乎总是有一种“pythonic”方式来做这些事情,行数更少且易于理解!
df['mean'] = df.groupby('DATE')['COD'].transform('mean')
您可以使用 transform
来广播您的均值和标准差
...
df['mean'] = df.groupby('DATE')['COD'].transform('mean')
df['std'] = df.groupby('DATE')['COD'].transform('std')
我有以下数据框:
COD CHM DATE
0 5713 0.0 2020-07-16
1 5713 1.0 2020-08-11
2 5713 2.0 2020-06-20
3 5713 3.0 2020-06-19
4 5713 4.0 2020-06-01
... ... ... ...
2135283 73306036 0.0 2020-09-30
2135284 73306055 12.0 2020-09-30
2135285 73306479 9.0 2020-09-30
2135286 73306656 3.0 2020-09-30
2135287 73306676 1.0 2020-09-30
我想计算整个日期(时间)内每个 COD 的均值和标准差。 为此,我正在做:
traf_user_chm_med =traf_user_chm_med.groupby(['COD', 'DATE'])['CHM'].sum().reset_index()
dates = pd.date_range(start=traf_user_chm_med.DATE.min(), end=traf_user_chm_med.DATE.max(), freq='MS', closed='left').sort_values(ascending=False)
clients = traf_user_chm_med['COD'].unique()
idx = pd.MultiIndex.from_product((clients, dates), names=['COD', 'DATE'])
M0 = pd.to_datetime('2020-08')
M1 = M0-pd.DateOffset(month=M0.month-1)
M2 = M0-pd.DateOffset(month=M0.month-2)
M3 = M0-pd.DateOffset(month=M0.month-3)
M4 = M0-pd.DateOffset(month=M0.month-4)
M5 = M0-pd.DateOffset(month=M0.month-5)
def filter_dates(grp):
grp.set_index('YEAR_MONTH', inplace=True)
grp=grp[M0:M5].reset_index()
return grp
traf_user_chm_med = traf_user_chm_med.groupby('COD').apply(filter_dates)
不确定为什么它不起作用,它 returns 是一个空数据框。 在此之后,我将在几个月内取消堆叠以获得 activity 并计算每个 COD 的平均值和标准偏差。 这是一个漫长的过程,不确定是否有更快的方法来获得我想要的值。 尽管如此,如果有人能帮助我使这个工作正常进行,那就太棒了!
如果我没理解错的话,你只是需要这个:
df.groupby("COD")["CHM"].agg("std")
作为一般原则,几乎总是有一种“pythonic”方式来做这些事情,行数更少且易于理解!
df['mean'] = df.groupby('DATE')['COD'].transform('mean')
您可以使用 transform
来广播您的均值和标准差
...
df['mean'] = df.groupby('DATE')['COD'].transform('mean')
df['std'] = df.groupby('DATE')['COD'].transform('std')