Попробуйте использовать groupby
, затем получите его значения, затем конвертируйте group
в словарь, затем создайте фрейм данных из словаря, затем транспонируйте его, затем создайте новый столбец для среднего значения, используя mean
:
import pandas as pd
df = pd.DataFrame({'Village': ['Village1', 'Village1',
'Village1', 'Village1', 'Village2',
'Village2', 'Village2', 'Village2'],
'Yield (in kg)': [0.22,0.23,0.55,0.2, 0.88, 0.89, 0.63, 0.55]})
group = df.groupby('Village')['Yield (in kg)'].apply(lambda x: x.values)
df = pd.DataFrame(group.to_dict()).T
df.columns = df.columns.astype(str)
df['Average'] = df.mean(axis=1)
print(df)
Вывод:
0 1 2 3 Average
Village1 0.22 0.23 0.55 0.20 0.3000
Village2 0.88 0.89 0.63 0.55 0.7375
для переименования столбцов:
df.columns = ['Yield (in kg)-'+i for i in df.columns if i != 'Average']
Вывод:
Yield (in kg)-0 Yield (in kg)-1 Yield (in kg)-2 Yield (in kg)-3 /
Village1 0.22 0.23 0.55 0.20
Village2 0.88 0.89 0.63 0.55
Average
Village1 0.3000
Village2 0.7375