我有一个如下数据框:
index accountid transdate
0 116490 2018-10-01
1 116490 2018-07-01
2 116490 2018-09-01
3 116490 2018-08-01
4 123033 2018-10-01
5 123033 2018-07-01
6 123033 2018-09-01
7 123033 2018-08-01
8 114175 2018-10-01
9 114175 2018-07-01
10 114175 2018-09-01
11 114175 2018-08-01
12 112962 2018-10-01
13 112962 2018-07-01
14 112962 2018-09-01
15 112962 2018-08-01
我正在尝试从accountid
的每组中随机获取行数。
例如,这里每个帐户id有4个transdates
,我试图在accountid
上进行分组,并从每个组中获取最少1行,最多4行。
预期输出:
index accountid transdate
0 116490 2018-10-01
1 116490 2018-07-01
3 116490 2018-08-01
4 123033 2018-10-01
5 123033 2018-07-01
8 114175 2018-10-01
9 114175 2018-07-01
10 114175 2018-09-01
11 114175 2018-08-01
12 112962 2018-10-01
13 112962 2018-07-01
15 112962 2018-08-01
我一直按accountid
进行分组,并在已分组的对象上应用random.sample
,但是每次它从每个组中返回固定数量的行时。
答案 0 :(得分:3)
您可以使用pandas.Series.sample
获取每个类别的随机样本,还可以在1 ... min(4, len(category))
中设置要随机分布的元素数:
import random
def random_sample(x):
n = random.randint(1, min(4, len(x)))
return x.sample(n)
df.groupby("accountid").transdate.apply(random_sample)
# accountid
# 112962 13 2018-07-01
# 14 2018-09-01
# 15 2018-08-01
# 114175 10 2018-09-01
# 11 2018-08-01
# 116490 2 2018-09-01
# 0 2018-10-01
# 3 2018-08-01
# 123033 5 2018-07-01
# 4 2018-10-01
# 7 2018-08-01