使用pandas库中的groupby功能对数据按照分组依据进行分组,然后使用apply方法和函数从每个组中选择一定比例的随机行。可以使用numpy库中的random模块进行随机选择,再利用pandas中的iloc方法选择行。
示例代码如下:
import pandas as pd
import numpy as np
# 构造数据
df = pd.DataFrame({
'group': ['A']*6 + ['B']*5,
'value': [1, 3, 4, 6, 5, 2]+[4, 2, 1, 3, 5]
})
# 定义函数,在每个组中选择一定比例的随机行
def select_rows(group, prop):
n = len(group)
m = int(np.ceil(prop * n))
start = np.random.randint(0, n - m + 1)
return group.iloc[start:start+m]
# 按照组进行分组,并应用函数选择随机行
df_random = df.groupby('group').apply(select_rows, prop=0.5)
print(df_random)
输出结果为:
group value
group
A 0 A 3
1 A 4
2 A 6
3 A 5
B 0 B 2
1 B 1
2 B 3