过滤掉后如何保留该行?

How to keep the row after filtering out?

我的步骤是这样的,先过滤dataframe,再groupby得到我想要的dataset。比如我的df是这样的:

test = pd.DataFrame([["Mon", 3, "A"], ["Tue", 6, "A"], ["Tue", 4, "A"], ["Wed", pd.np.nan, "A"], ["Thu", 9, "A"], ["Fri", 1, "A"], ["Sat", 2, "A"], ["Sun", 3, "B"]], columns=["date", "value", "class"])

数据框“测试”如下所示:

        date  value  Class
0        Mon    3     A
1        Tue    6     A
2        Tue    4     A
3        Wed    0     A
4        Thu    9     A
5        Fri    1     A
6        Sat    2     A
7        Sun    3     B

我会先通过test = test[test["class"] == "A"]过滤所有A 然后我将按 new_df = test(["date"],dropna=False)["value"].sum()

汇总

因为如您所见,星期日将在第一步中被过滤掉。上面聚合后的结果数据框将没有星期日。但是最后的数据集需要把星期天留在那里。

按“日期”分组后我的目标是这样的。

        date  value 
0        Mon    3    
1        Tue    10    
2        Wed    0    
3        Thu    9     
4        Fri    1     
5        Sat    2     
6        Sun    0  

这只是一个简化版本。我的实际情况是,“数据”列实际上是一个日期列,例如 1-Jan-2021。数据集长达几年。但是过滤会在第一步过滤掉一些日期(如上面的例子,过滤后星期天就没有了)。但是,我希望那些年的所有日期都在我的结果数据框中。我怎样才能实现它?

先将不想保留的值设为0如何

test.loc[test['class']!='A', 'value'] = 0
test.groupby('date')['value'].sum()
date
Fri     1.0
Mon     3.0
Sat     2.0
Sun     0.0
Thu     9.0
Tue    10.0
Wed     0.0