サンプルを生成したい母集団に関する情報を含むデータフレームがあります。また、サンプルで必要なデータフレームsample_info
内の各グループのユニット数を詳細に示すpopulation
データフレームもあります。必要なものを実現するコードをいくつか開発しましたが、使用しているデータセットが大きいため、実行速度が遅くなります。
以下で行ったようにグループをループするのではなく、母集団フレームをグループ化し、グループにサンプリングを適用する方法はありますか?
import pandas as pd
population = pd.DataFrame([[1,True],[1,False],[1,False],[2,True],[2,True],[2,False],[2, True]], columns = ['Group ID','Response'])
Group ID Response
0 1 True
1 1 False
2 1 False
3 2 True
4 2 True
5 2 False
6 2 True
sample_info = pd.DataFrame([[1,5],[2,6]], columns = ['Group ID','Sample Size'])
output = pd.DataFrame(columns = ['Group ID','Response'])
Group ID Sample Size
0 1 5
1 2 6
for index, row in sample_info.iterrows():
output = output.append(population.loc[population['Group ID'] == row['Group ID']].sample(n=row['Sample Size'], replace = True))
group-byを使用してサンプルサイズ情報を取り込み、Pandasで提案されているように適用することができませんでした:groupbyの後に各グループをサンプリングします
sample_infoを辞書に変換します。グループIDによるグループ人口。ディクショナリを使用して、サンプルサイズの値をDataFrame.sampleに渡します。
mapper = sample_info.set_index('Group ID')['Sample Size'].to_dict()
population.groupby('Group ID').apply(lambda x: x.sample(n=mapper.get(x.name))).reset_index(drop = True)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加