#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. Действительно умное решение