【发布时间】:2022-01-23 03:03:25
【问题描述】:
我的步骤是这样的,我会先过滤dataframe,然后groupby得到我想要的数据集。比如我的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。数据集长达几年。但是过滤会在第一步中过滤掉一些日期(如上面的示例,过滤后星期天就消失了)。但是,我希望那些年份的所有日期都在我的结果数据框中。我怎样才能实现它?
【问题讨论】:
-
你说
test(["date"],dropna=False)但是,你不是说test之后的sum 函数吗?例如test.XXX(["date"],dropna=FALSE)
标签: python pandas datetime pandas-groupby filtering