Python 有条件地从数据帧中采样行

Python 有条件地从数据帧中采样行,python,pandas,dataframe,sample,Python,Pandas,Dataframe,Sample,我有一个熊猫数据框架,其中某些人被过度代表。我想再做一次抽样,将每次观察的次数限制在某个最大值 现在我在循环中做这件事,并试图用dicts构建一个数据帧。但是索引正在妨碍我,我希望有人能给我指出一些更简单的解决办法。真实数据,约2万行,约4K列,约400人。谢谢 示例数据 df = pd.DataFrame({'name': ["Alice", "Alice", "Charles", "Charles", "Charles", "Kumar", "Kumar", "Kumar", "Kumar"

我有一个熊猫数据框架,其中某些人被过度代表。我想再做一次抽样,将每次观察的次数限制在某个最大值

现在我在循环中做这件事,并试图用dicts构建一个数据帧。但是索引正在妨碍我,我希望有人能给我指出一些更简单的解决办法。真实数据,约2万行,约4K列,约400人。谢谢

示例数据

df = pd.DataFrame({'name': ["Alice", "Alice", "Charles", "Charles", "Charles", "Kumar", "Kumar", "Kumar", "Kumar"],
              'height': [124, 125, 169, 178, 177, 172, 173, 175, 174]})

df
    height name
0   124 Alice
1   125 Alice
2   169 Charles
3   178 Charles
4   177 Charles
5   172 Kumar
6   173 Kumar
7   175 Kumar
8   174 Kumar
我现在的代码,对于这个示例,试图将每个人限制在每行2行

sub_df = []
for name in pd.unique(df.name):
    sub_df.append(df[df.name == name].sample(n=2, random_state=42).to_dict())

pd.DataFrame(sub_df)
我得到了什么

    height               name
0   {1: 125, 0: 124}    {1: 'Alice', 0: 'Alice'}
1   {2: 169, 3: 178}    {2: 'Charles', 3: 'Charles'}
2   {6: 174, 8: 175}    {6: 'Kumar', 8: 'Kumar'}
我想要什么

    height name
0   125 Alice
1   124 Alice
2   169 Charles
3   178 Charles
4   174 Kumar
5   175 Kumar

'name'
执行
分组,然后使用:

结果输出:

   height     name
0     125    Alice
1     124    Alice
2     177  Charles
3     169  Charles
4     175    Kumar
5     173    Kumar
   height     name
0     125    Alice
1     124    Alice
2     177  Charles
3     169  Charles
4     175    Kumar
5     173    Kumar