按日期和列分组
Group by Date and Column
我有一个数据框:
Date_time | Available
21/10/2020 05:00:01 | Yes
21/10/2020 12:20:01 | No
22/10/2020 04:30:01 | Yes
22/10/2020 03:40:01 | Yes
22/10/2020 01:50:01 | No
23/10/2020 02:10:01 | Yes
23/10/2020 11:30:01 | Yes
我想复制 SQL 的案例状态并在 Python 中分组。
SELECT date,
sum(case when Available = 'Yes' then 1 else 0 end)*100/count(*) as Available_rate
FROM table
group by date
我要找的是:
Date | Available_rate
21/10/2020 | 50
22/10/2020 | 66.667
23/10/2020 | 100
我可以在 python 中做到这一点:
daily_count = df.groupby([df['date'].dt.date]).size().reset_index(name='counts')
我不确定如何更进一步。
您可以将“Available”转换为布尔值,并使用 GroupBy.mean
,这将利用 True/1 和 False/0 等价关系为您提供汇率:
out = (df['Available']
.eq('Yes')
.groupby(df['Date'])
.mean()
.mul(100)
)
输出:
Date
21/10/2020 50.000000
22/10/2020 66.666667
23/10/2020 100.000000
Name: Available, dtype: float64
替代格式:
out = (df['Available']
.eq('Yes')
.groupby(df['Date'])
.mean()
.mul(100)
.rename('available rate')
.reset_index()
)
这是替代解决方案,使用 pd.pivot_table
:
x = pd.pivot_table(
df.assign(Available_mean=df["Available"].eq("Yes")),
index="Date",
values="Available_mean",
aggfunc="mean",
)
print(x * 100)
打印:
Available_mean
Date
2020-10-21 50.000000
2020-10-22 66.666667
2020-10-23 100.000000
我有一个数据框:
Date_time | Available
21/10/2020 05:00:01 | Yes
21/10/2020 12:20:01 | No
22/10/2020 04:30:01 | Yes
22/10/2020 03:40:01 | Yes
22/10/2020 01:50:01 | No
23/10/2020 02:10:01 | Yes
23/10/2020 11:30:01 | Yes
我想复制 SQL 的案例状态并在 Python 中分组。
SELECT date,
sum(case when Available = 'Yes' then 1 else 0 end)*100/count(*) as Available_rate
FROM table
group by date
我要找的是:
Date | Available_rate
21/10/2020 | 50
22/10/2020 | 66.667
23/10/2020 | 100
我可以在 python 中做到这一点:
daily_count = df.groupby([df['date'].dt.date]).size().reset_index(name='counts')
我不确定如何更进一步。
您可以将“Available”转换为布尔值,并使用 GroupBy.mean
,这将利用 True/1 和 False/0 等价关系为您提供汇率:
out = (df['Available']
.eq('Yes')
.groupby(df['Date'])
.mean()
.mul(100)
)
输出:
Date
21/10/2020 50.000000
22/10/2020 66.666667
23/10/2020 100.000000
Name: Available, dtype: float64
替代格式:
out = (df['Available']
.eq('Yes')
.groupby(df['Date'])
.mean()
.mul(100)
.rename('available rate')
.reset_index()
)
这是替代解决方案,使用 pd.pivot_table
:
x = pd.pivot_table(
df.assign(Available_mean=df["Available"].eq("Yes")),
index="Date",
values="Available_mean",
aggfunc="mean",
)
print(x * 100)
打印:
Available_mean
Date
2020-10-21 50.000000
2020-10-22 66.666667
2020-10-23 100.000000