Python 有条件地从数据帧中采样行
我有一个熊猫数据框架,其中某些人被过度代表。我想再做一次抽样,将每次观察的次数限制在某个最大值 现在我在循环中做这件事,并试图用dicts构建一个数据帧。但是索引正在妨碍我,我希望有人能给我指出一些更简单的解决办法。真实数据,约2万行,约4K列,约400人。谢谢 示例数据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"
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