Я знаю, что есть лучшие способы сделать это, но я собираюсь использовать pandas фрейм данных, используя iterrows
, чтобы вычислить среднее значение в двоичном виде и удалить строки на каждой итерации. Я беру количество строк, которые я удаляю, из числа данных в корзине. Я делаю это вместо того, чтобы создавать постоянное количество бинов за раз, а затем вычисляю среднее бин, потому что мне нужно убедиться, что бины не перекрываются. Я делал это раньше, и у меня была эта проблема. Часть кода ниже - это то, что я сейчас использую. Это работает для первой итерации, но после этого я получаю сообщение о том, что eval()
не может оценить df_name
: eval() arg 1 must be a string, bytes or code object
for df_name in alldfs:
for row,index in eval(df_name).iterrows():
ranges=np.arange(eval(df_name).A.min()-0.1 , eval(df_name).A.max() + 0.1, 0.1)
groups = eval(df_name).groupby(pd.cut(eval(df_name).mass, ranges,include_lowest=True))
df_bin=pd.DataFrame(groups.mean())
df_bin['binned']=eval(df_name).groupby(pd.cut(eval(df_name).mass, ranges, include_lowest=True)).size()
number_bin=np.array(df_bin['binned'])[0]
df_name=eval(df_name).drop(eval(df_name).index[0:number_bin])