如何将以整数(age)为索引的330行DataFrame下采样至97行?
解决方案:将DataFrame下采样至指定行数
针对你这个以age为整数索引、330行的DataFrame,要下采样到97行,这里有两个简洁高效的实现方式,按需选择即可:
方法一:按行位置均匀采样(最简洁)
如果只需要保证采样后的行在原数据中均匀分布,无需考虑age的数值分布,这个方法最快最直接:
import numpy as np # 生成0到总行数-1之间的97个均匀整数索引 sample_idx = np.linspace(0, len(df)-1, 97, dtype=int) downsampled_df = df.iloc[sample_idx]
原理很直观:np.linspace会在原数据的行位置范围内,生成97个间隔均匀的整数索引,再用iloc提取对应行,一步完成下采样。
方法二:基于age索引的区间采样
如果希望采样能贴合age的数值区间(比如原数据age分布不均匀时,保证每个年龄区间都有样本),可以用分箱分组的方式:
import pandas as pd # 把age索引划分为97个等宽区间 df['age_bin'] = pd.cut(df.index, bins=97) # 每个区间取第一行(也可以换成median()取中间值行、mean()取均值行等) downsampled_df = df.groupby('age_bin').first().drop(columns='age_bin')
这个方法会根据age的数值范围拆分出97个区间,每个区间选一行样本,能更好地保留原数据在年龄维度上的分布特征。
内容的提问来源于stack exchange,提问作者user9454050
相关产品推荐
相关产品推荐

