列条件为条件的交叉表熊猫不显示求和值

时间:2018-07-17 13:42:36

标签: python-3.x pandas crosstab

使用pd.crosstab显示我想要的内容时出现问题

我尝试了这些行:

pd.crosstab(df_temp['date'].apply(lambda x: pd.to_datetime(x).year), df_temp['state'][df_temp['state'] >= 20], margins=True])

pd.crosstab(df_temp['date'].apply(lambda x: pd.to_datetime(x).year), df_temp['state'][df_temp['state'] >= 20], margins=True, aggfunc = lambda x: x.count(), values = df_temp['state'][df_temp['state'] >= 20])

它们都显示以下内容:

state              20.0   30.0  32.0   50.0     All
date                                   
2017              303.0  327.0   6.0  118.0   754.0
2018              328.0  167.0   3.0   58.0   556.0
All               631.0  494.0   9.0  176.0  1310.0`

但是我想要的不是针对每个州计算作为州的值的数量。例如,对于每年20个州,我希望该值是大于或等于20的所有值的计数。因此,它应为754。对于30个州,其值应为754-303 =451。对于其他州,依此类推

我也尝试过此命令行,但是它也不起作用:

pd.crosstab(df_temp['date'].apply(lambda x: pd.to_datetime(x).year), df_temp['state'][(df_temp['state'] >= 20)  | (df_temp['state'] == 30)], margins=True, aggfunc = lambda x: x.count(), values = df_temp['state'][(df_temp['state'] == 20) | (df_temp['state'] == 30)])

它显示下表:

state              20.0   30.0  32.0  50.0     All
date                                  
2017              303.0  327.0   0.0   0.0   630.0
2018              328.0  167.0   0.0   0.0   495.0
All               631.0  494.0   NaN   NaN  1125.0

0 个答案:

没有答案