У меня есть два фрейма данных: df_s_T и df_data_T и я хочу агрегировать (например, с помощью функции среднего агрегирования) второй на основе первого столбцовым способом,Вот что я имею в виду под примером:
ind = ['d1','d2','d3','d4']
my_data_ints = {'s1': [1, 2, 1, 2], 's2': [1, 2, 1, 1],'s3': [1, 1, 1, 1]}
df_s_T = pd.DataFrame(data=my_data_ints, index = ind).T
my_data = {'s1': [-1, 2, 5, 12], 's2': [-2, 2, 4, 10.5], 's3': [1, 2, 3, 4]}
df_data_T = pd.DataFrame(data=data, index = ind).T
, который можно визуализировать следующим образом:
print df_data_T
print df_s_T
d1 d2 d3 d4
s1 -1.0 2.0 5.0 12.0
s2 -2.0 2.0 4.0 10.5
s3 1.0 2.0 3.0 4.0
d1 d2 d3 d4
s1 1 2 1 2
s2 1 2 1 1
s3 1 1 1 1
Желаемый результат (вычисление среднего для каждого столбца для всех строк с равными значениями):
d1 d2 d3 d4
1 -0.66 2.0 4.0 7.25
2 nan 2.0 nan 12.00
В моем примере для столбцов d1 и d3 значение строки 2 в желаемом выходном кадре данных равно nan, так как в «нет» значений «2»столбцы d1 и d3 в кадре данных df_s_T .
То, что я успешно выполнил, - это агрегирование по фиксированному столбцу (например, последний1), см. ниже
df_data_T_new = df_data_T.groupby(df_s_T.iloc[:,-1]).mean()
df_data_T_new
d1 d2 d3 d4
d4
1 -0.5 2.0 3.5 7.25
2 -1.0 2.0 5.0 12.00
Я хочу создать умное решение, возможно, без написания циклов.Каким-то образом сначала нужно получить все возможные значения в df_data_T , чтобы правильно построить результирующий фрейм данных.
Заранее спасибо за предложения.