Добавление значений в новый столбец на основе двух других столбцов - PullRequest
1 голос
/ 26 марта 2020

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

 User         Function          Total hours   Damage Processing problem solve damages sweeper
 schae      Damage Processing      9.36
 Julie      Problem solve          9.70
 John       sweeper                18.9
 Dan       Damages                 1.83
 Dan       Damages                 1.83
 Julie     Damages                 1.83
 Dan       Problem solve           1.83

Ожидаемый результат будет выглядеть как

 User         Function          Total hours   Damage Processing  problem solve damages  sweeper
 schae     Damage Processing       9.36          9.36
 Julie     Problem solve           9.70                            9.70
 John      sweeper                 18.9                                                  18.9
 Dan       Damages                 1.83                                        1.83                                 
 Dan       sweeper                 1.83                                                  1.83
 Julie     Damages                 1.83                                        1.83
 Dan       Problem solve           1.83                            1.83

Я думаю о pd.melt, но он выдает значение ошибки, var отсутствует

res = pd.melt(result,id_vars = ['Function'],value_vars=['Total hours'])

Ответы [ 2 ]

1 голос
/ 26 марта 2020

вот способ использования get_dummies и df.assign:

out = (df[['User','Function','Total hours']].assign(**pd.get_dummies(df['Function'])
       .mul(df['Total hours'],axis=0).replace(0,np.nan)))
print(out)

    User           Function  Total hours  Damage Processing  Damages  \
0  schae  Damage Processing         9.36               9.36      NaN   
1  Julie      Problem solve         9.70                NaN      NaN   
2   John            sweeper        18.90                NaN      NaN   
3    Dan            Damages         1.83                NaN     1.83   
4    Dan            Damages         1.83                NaN     1.83   
5  Julie            Damages         1.83                NaN     1.83   
6    Dan      Problem solve         1.83                NaN      NaN   

   Problem solve  sweeper  
0            NaN      NaN  
1           9.70      NaN  
2            NaN     18.9  
3            NaN      NaN  
4            NaN      NaN  
5            NaN      NaN  
6           1.83      NaN 
0 голосов
/ 26 марта 2020
for i in range(len(df)):
    col = df.loc[i]['Function']
    df.at[i, col] = df.xs(i)['Total hours']
    print(col)

Попробуй это! Переменная col находит столбец, для которого вы хотите вставить значение Total hours.

...