我有一个大的pandas
数据框df
:
year count
1983 5
1983 4
1983 7
...
2009 8
2009 11
2009 30
我希望每年随机抽取10个数据点,这可以通过以下方法实现:
new_df = pd.DataFrame(columns=['year', 'count'])
ref = df.year.unique()
for i in range(len(ref)):
appended_df = df[df['year'] == ref[i]].sample(n=10)
new_df = pd.concat([new_df,appended_df])
然后,我随机给count
赋予一个符号(这样随机情况下count
可能是正数或负数),并将其重命名为value
,可以通过以下方式完成:
vlist = []
for i in range(len(new_df)):
if randint(0,1) == 0:
vlist.append(new_df.count.iloc[i])
else:
vlist.append(new_df.count.iloc[i] * -1)
new_data['value'] = vlist
对于每个 year
,获取其平均值和标准差非常简单:
xdf = new_data.groupby("year").agg([np.mean, np.std]).reset_index()
但是我似乎找不到一种尝试每年进行100次取样,并存储均值值并获取每年这100个均值的平均值和标准偏差的最佳方法。我考虑过使用for
循环,但运行时间太长。
基本上,输出应该采用以下形式(这里的value
是任意的):
year mean_of_100_means total_sd
1983 4.22 0.43
1984 -6.39 1.25
1985 2.01 0.04
...
2007 11.92 3.38
2008 -5.27 1.67
2009 1.85 0.99
欢迎提供任何想法。
count
分配一个随机符号? - Derek O