I have a following problem.
JavaScript
x
6
1
df_dict = {"uziv_id" : [1, 1, 2, 3], "datetime" : ["2022-09-05 07:25:12", "2022-09-05 07:25:52", "2022-09-05 07:42:12", "2022-09-05 07:43:12"],
2
"expedice" : ["A", "A", "B", "A"]}
3
4
df = pd.DataFrame(df_dict)
5
6
I need to count uziv_id per 10 minute interval and per expedice
. I try this:
JavaScript
1
11
11
1
df["time"] = pd.to_datetime(df["datetime"])
2
3
df = (
4
df.groupby(pd.Grouper(freq="10Min", key="time"), "exp")["uziv_id"]
5
.nunique()
6
.reset_index(name="count")
7
)
8
df = df.rename(columns={"time": "interval start"})
9
df.insert(1, "interval end", df["interval start"] + pd.Timedelta("10Min"))
10
11
But I got an error ValueError: No axis named exp for object type DataFrame
. What do I do wrong please?
Advertisement
Answer
Use list []
in groupby
:
JavaScript
1
15
15
1
df["time"] = pd.to_datetime(df["datetime"])
2
3
df = (
4
df.groupby([pd.Grouper(freq="10Min", key="time"), "expedice"])["uziv_id"]
5
.nunique()
6
.reset_index(name="count")
7
)
8
df = df.rename(columns={"time": "interval start"})
9
df.insert(1, "interval end", df["interval start"] + pd.Timedelta("10Min"))
10
print (df)
11
interval start interval end expedice count
12
0 2022-09-05 07:20:00 2022-09-05 07:30:00 A 1
13
1 2022-09-05 07:40:00 2022-09-05 07:50:00 A 1
14
2 2022-09-05 07:40:00 2022-09-05 07:50:00 B 1
15