我刚刚从 R 转移到 Python 并且有一个关于 groupby 的问题。我有一个具有三个功能的数据框,如下所示:
date Scaled Name
3 2018-10-01 02:00:00 14.57 19245
4 2018-10-01 02:00:00 11.90 7245
5 2018-10-01 02:00:00 15.84 25245
6 2018-10-01 03:00:00 16.98 25245
7 2018-10-01 03:00:00 11.40 7245
8 2018-10-01 03:00:00 16.95 19245
9 2018-10-01 04:00:00 17.78 25245
10 2018-10-01 04:00:00 12.06 7245
11 2018-10-01 04:00:00 18.19 19245
12 2018-10-01 05:00:00 19.63 25245
Run Code Online (Sandbox Code Playgroud)
我在数据集中有大约 80 个唯一名称,因此有重复的日期。我想在数据集中创建一个新列,它是每个 Name 唯一的百分比,显示该特定 Name 的小时数与数据集中的总小时数范围相比的比例。我可以轻松地进行此计算,但我正在努力生成新列。计算将是这样的
hours = ((df['date'].max(axis=0) - df['date'].min(axis=0)).total_seconds())/3600
df['percentage'] = df['Name'].value_counts()/ hours
Run Code Online (Sandbox Code Playgroud)
你很接近,只添加Series.map:
df['percentage'] = df['Name'].map(df['Name'].value_counts())/ hours
Run Code Online (Sandbox Code Playgroud)
或者使用GroupBy.transform具有GroupBy.size:
df['percentage'] = df.groupby('Name')['Name'].transform('size')/ hours
Run Code Online (Sandbox Code Playgroud)
print (df)
date Scaled Name percentage
0 2018-10-01 02:00:00 14.57 19245 1.000000
1 2018-10-01 02:00:00 11.90 7245 1.000000
2 2018-10-01 02:00:00 15.84 25245 1.333333
3 2018-10-01 03:00:00 16.98 25245 1.333333
4 2018-10-01 03:00:00 11.40 7245 1.000000
5 2018-10-01 03:00:00 16.95 19245 1.000000
6 2018-10-01 04:00:00 17.78 25245 1.333333
7 2018-10-01 04:00:00 12.06 7245 1.000000
8 2018-10-01 04:00:00 18.19 19245 1.000000
9 2018-10-01 05:00:00 19.63 25245 1.333333
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |