Использование Python панды, как сделать следующий анализ - PullRequest
0 голосов
/ 04 июня 2018

У меня есть данные по урожайности для некоторых деревень. Образцы данных см. В приложении. введите описание изображения здесь

Village Yield(in Kg)    Date
Village1    0.22    01/06/18
Village1    0.23    02/06/18
Village1    0.55    01/06/18
Village1    0.2     02/06/18
Village2    0.88    31/05/18
Village2    0.89    30/05/18
Village2    0.63    30/05/18
Village2    0.55    30/05/18

Теперь я хочу показать, что деревни соответствуют данным по урожайности.с экспериментом date.so, village1 имеет 4 значения доходности.

Пожалуйста, смотрите вложение. введите описание изображения здесь

Village     Yield-1                Yield-2              Yield-3 
Village1    0.22    01/06/18        0.23    02/06/18    0.55    01/06/18    

Любая помощь будет полезна.Спасибо

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

попробуйте это,

df.groupby(['Village']).apply(lambda x:pd.Series(zip(x['Yield(in Kg)'],x['Date']))).reset_index()


    Village                 0                 1                 2  \
0  Village1  (0.22, 01/06/18)  (0.23, 02/06/18)  (0.55, 01/06/18)   
1  Village2  (0.88, 31/05/18)  (0.89, 30/05/18)  (0.63, 30/05/18)   

                  3  
0   (0.2, 02/06/18)  
1  (0.55, 30/05/18)

, чтобы переименовать столбцы:

col1=df.filter(regex='\d+').columns.values
col2=['Yield - '+str(col+1) for col in col1]
df.rename(columns= dict(zip(col1,col2)),inplace=True)

    Village         Yield - 1         Yield - 2         Yield - 3  \
0  Village1  (0.22, 01/06/18)  (0.23, 02/06/18)  (0.55, 01/06/18)   
1  Village2  (0.88, 31/05/18)  (0.89, 30/05/18)  (0.63, 30/05/18)   

          Yield - 4  
0   (0.2, 02/06/18)  
1  (0.55, 30/05/18)
0 голосов
/ 04 июня 2018

Попробуйте использовать 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
0 голосов
/ 04 июня 2018

Использование:

df = (df.set_index(['Village', df.groupby('Village').cumcount().add(1)])
        .unstack()
        .sort_index(axis=1, level=1))

df.columns = ['{}-{}'.format(x, y) for x, y in df.columns]
df = df.reset_index()
print (df)
    Village  Yield(in Kg)-1    Date-1  Yield(in Kg)-2    Date-2  \
0  Village1            0.22  01/06/18            0.23  02/06/18   
1  Village2            0.88  31/05/18            0.89  30/05/18   

   Yield(in Kg)-3    Date-3  Yield(in Kg)-4    Date-4  
0            0.55  01/06/18            0.20  02/06/18  
1            0.63  30/05/18            0.55  30/05/18  

Объяснение :

  1. Сначала set_index с группами, созданными GroupBy.cumcount и unstack для изменения формы
  2. Сортировка второго уровня MultiIndex по sort_index
  3. Сглаживание Multiindex встолбцы с пониманием списка
  4. Создать столбец из индекса по reset_index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...