python - 在 pandas 组内分配分位数

标签 python pandas group-by pandas-groupby

我正在尝试根据以下数据框中每个 ID 组中的 J1 列添加分位数。

import pandas as pd
try_df = pd.DataFrame({'ID':['1','1','1','1','1','2','2','2','2','2','3','3','3','3','3'], 'J1': range(15)})
print(try_df)    
try_df["quantiles"] = try_df.groupby("ID")["J1"].transform(pd.qcut,4,["Q1","Q2","Q3","Q4"])

   ID  J1
0   1   0
1   1   1
2   1   2
3   1   3
4   1   4
5   2   5
6   2   6
7   2   7
8   2   8
9   2   9
10  3  10
11  3  11
12  3  12
13  3  13
14  3  14

上面的代码给出了一个值错误:以 10 为基数的 long() 的文字无效:'Q4'

在真实数据中它会抛出此错误:

ValueError: could not convert string to float: Q2

关于如何解决这个问题有什么建议吗?

最佳答案

尝试groupby + 应用:

try_df.groupby("ID")["J1"].apply(lambda x: pd.qcut(x, 4, ["Q1","Q2","Q3","Q4"]))

0     Q1
1     Q1
2     Q2
3     Q3
4     Q4
5     Q1
6     Q1
7     Q2
8     Q3
9     Q4
10    Q1
11    Q1
12    Q2
13    Q3
14    Q4
Name: J1, dtype: category
Categories (4, object): [Q1 < Q2 < Q3 < Q4]

关于python - 在 pandas 组内分配分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46904575/

相关文章:

python - 我们可以在 python 中运行 ipython 命令吗?

python - 使用 OpenGL,结果是否取决于安装的硬件或驱动程序?

python - 如果某些行不存在于其他数据帧中,Pandas 连接两个数据帧并保留一个数据集中的数据

SQL - 在某些条件之前和之后检索组内的数据

Python 删除组合字典列表中的重复值

python - 计算 Pandas 中连续两行之间的时间差

python - 在数据框中插入记录的 concat 的替代方法

mysql - 在 MySQL 查询中,DISTINCT 是在 GROUP BY 之前还是之后应用的?

sql - 查询按每日显示为日期从-到分组

python - 应用正则表达式创建新列 - isdigit() 与 isnumeric()