Применить функцию apply() к нескольким столбцам в pandas?

#pandas #numpy #dataframe

#pandas #numpy #фрейм данных

Вопрос:

Раньше у меня был столбец, «объединенный» в фрейме данных, подобный этому:

        combined

 0   0.97,0.92,0.65,0.24,0.15,0.19   
 1   0.96,0.86,0.69,0.38,0.56,0.78   
 2   0.64,0.69,0.93,0.07,0.73,0.05
 3   0.29,0.56,0.35,0.76,0.19,0.07
 

Итак, когда я попытался применить функцию numpy frequency_changer(), мне просто нужно сделать так:

 def frequency_changer(y):
    x_val_30 = [] 
    for i in range(0, len(y), 4):
        x_val_30.append(i)


    x_val = [] 
    for i in range(len(y)):  
        x_val.append(i)
    y_val = y
    cs = CubicSpline(x_val, y_val)
    x2 = cs(x_val_30)
    return x2


df['combined']=df['combined'].apply(frequency_changer)
 

Теперь мой новый фрейм данных содержит много столбцов, и каждый столбец имеет одно значение.

 df_new

      0      1       2       3       4       5  
0   0.97    0.92    0.65    0.24    0.15    0.19    
1   0.96    0.86    0.69    0.38    0.56    0.78    
2   0.64    0.69    0.93    0.07    0.73    0.05
3   0.29    0.56    0.35    0.76    0.19    0.07
 

Я применил ту же функцию, она больше не работала. В новом фрейме данных та же функция уменьшила общее количество строк. (Я хочу иметь функцию, которая работает с длиной каждой строки).
Как я должен это решить? Спасибо!

Ответ №1:

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

 def frequency_changer(y):
    x_val_30 = [] 
    for i in range(0, len(y), 4):
        x_val_30.append(i)


    x_val = [] 
    for i in range(len(y)):  
        x_val.append(i)
    y_val = y
    cs = CubicSpline(x_val, y_val)
    x2 = cs(x_val_30)
    return x2


#Original df
df['combined'].apply(frequency_changer)
 
 0    [0.97, 0.15]
1    [0.96, 0.56]
2    [0.64, 0.73]
3    [0.29, 0.19]
Name: combined, dtype: object
 
 #For new df
new_out = new_df.T.apply(frequency_changer).T  #<------
print(new_out)
 
       0     1
0  0.97  0.15
1  0.96  0.56
2  0.64  0.73
3  0.29  0.19
 

Если вы хотите объединить 2 столбца в один список, как ваша функция вела себя для предыдущего df, тогда просто используйте new_out.values.tolist() и сохраните его в новом фрейме данных или как новый столбец.

Комментарии:

1. Спасибо! Мне нужно перезапустить сеанс и попробовать. Это может занять некоторое время. Это. T, вы использовали функцию транспонирования?

2. Это хорошо работает. Спасибо @Akshay. Действительно умное решение