2015-03-08 3 views
1
dictionary = {'Year': [1985, 1985, 1986, 1986, 1987, 1987], 'Wteam' :[9, 10, 11, 4, 5, 6], 'lteam': [ 1, 2, 3, 12, 13, 14] } 
pdf = pd.DataFrame(dictionary) 

    Wteam Year lteam 
0 9  1985 1 
1 10  1985 2 
2 11  1986 3 
3 4  1986 12 
4 5  1987 13 
5 6  1987 14 

мне нужно, чтобы создать новый кадр данных в панд, который имеет следующие строки и столбцыперекручивание и трансформация в панд

Season_value result 
1985_1_9   0 
1985_2_10   0 
1985_3_11   0 
1985_4_12   1 
1985_5_13   1 
1985_6_14   1 

Логика для формирования новой таблицы выглядит следующим образом: Я должен цикл через каждую строку в таблице pdf, а затем, если значение W_team больше l_team, тогда первое значение столбца в моем new data frame должно быть «year_lteam_wteam», а значение результата должно быть равно нулю.

Если значение величины W_team является меньшей, чем l_team то первый столбец в моей new data frame должно быть year_Wteam_lteam и колонка результат должен быть равен нулю.

рефералом link

+0

Вы ограничены перекручивание через dataframe? Другими словами, вас интересует вычисление одного и того же результата непосредственно из словаря? – jedwards

+0

Кроме того, для обоих случаев вы написали, что значение результата должно быть равно нулю - вы имели в виду, что он должен быть одним для второго случая? – jedwards

+0

@jedwards yes Я хочу получить данные из фрейма данных. в первом случае оно должно быть равно нулю, а во втором случае оно должно быть равным единице. – MJP

ответ

1

Вы могли

  • использование np.where для присвоения значений pdf['result'] на основе состояния. В np.where(cond, 0, 1), cond является булевым массивом. np.where возвращает новый массив с той же формой, что и cond, который принимает значение 0, где cond имеет значение True и 1, где cond - False.
  • .min() и .max() изменить порядок Wteam и lteam.
  • построить колонку Season_value как Mostafa Mahmoud showed.

import numpy as np 
import pandas as pd 
def tostr(series): 
    return series.astype(str) 

dictionary = {'Year': [1985, 1985, 1986, 1986, 1987, 1987], 'Wteam' :[9, 10, 11, 4, 5, 6], 'lteam': [ 1, 2, 3, 12, 13, 14] } 
pdf = pd.DataFrame(dictionary) 
pdf['result'] = np.where(pdf['Wteam'] > pdf['lteam'], 0, 1) 
pdf['min'] = pdf[['Wteam','lteam']].min(axis=1) 
pdf['max'] = pdf[['Wteam','lteam']].max(axis=1) 

pdf['Season_value'] = tostr(pdf['Year'])+'_'+tostr(pdf['min'])+'_'+tostr(pdf['max']) 

print(pdf[['Season_value', 'result']]) 

дает

Season_value result 
0  1985_1_9  0 
1 1985_2_10  0 
2 1986_3_11  0 
3 1986_4_12  1 
4 1987_5_13  1 
5 1987_6_14  1 
+0

Можете ли вы также объяснить, как работает np.where в этом контексте. – MJP