Да, используйте name
и index
атрибуты серии:
df = pd.DataFrame(1, index = np.arange(10,51,10), columns = np.arange(5))
Показать входной фрейм данных
0 1 2 3 4
10 1 1 1 1 1
20 1 1 1 1 1
30 1 1 1 1 1
40 1 1 1 1 1
50 1 1 1 1 1
Давайте определим пользовательскую функцию и будем использовать строки в качестве столбцов для выполнениярасчет.
def f(x):
#add row values to column values
return x.name + x.index
df.apply(f)
Вывод:
0 1 2 3 4
10 10 11 12 13 14
20 20 21 22 23 24
30 30 31 32 33 34
40 40 41 42 43 44
50 50 51 52 53 54
Примечание: apply
передает каждый столбец кадра данных (который является pd.Series) в функцию f.Каждая серия имеет атрибут name
, который является заголовком столбца, и index
, который является индексом строки данных.Итак, функция, f возвращает вычисленный pd.Series для каждого столбца информационного кадра и объединяется обратно в виде информационного кадра.
Отвечая на вопрос в комментариях, давайте использовать строки:
df = pd.DataFrame(1, index=['Ted','Bill','Ralph','John','Tim'], columns=['A','B','C','D','E'])
def f(x):
#Concatenate row values with column values
return x.index + '_' + x.name
df.apply(f)
ИЛИ используйте лямбда-функцию
df.apply(lambda x: x.index + '_' + x.name)
Выход:
A B C D E
Ted Ted_A Ted_B Ted_C Ted_D Ted_E
Bill Bill_A Bill_B Bill_C Bill_D Bill_E
Ralph Ralph_A Ralph_B Ralph_C Ralph_D Ralph_E
John John_A John_B John_C John_D John_E
Tim Tim_A Tim_B Tim_C Tim_D Tim_E