2015-05-06 4 views
1

Я хотел бы знать, как создать новую строку на основе строки имен столбцов в фреймворке python и добавить ее к тому же файловому кадру.Python: создать новую строку на основе имен столбцов в DataFrame

пример

df = pd.DataFrame(np.random.randn(10, 5),columns=['abx', 'bbx', 'cbx', 'acx', 'bcx']) 

Я хочу, чтобы создать новую строку на основе имен столбцов, что дает: b | b | b | c | c |, принимая средний символ имени столбца.

Идея состоит в том, чтобы использовать эту новую строку позже для многоиндексации столбцов.

+0

Длина длин столбцов всегда 3 символа? – EdChum

+0

Например, 'df.append (dict (zip (df.columns, [col [1] для col in df])), ignore_index = True)' что вы хотите? – EdChum

+0

Если мой ответ ответит на ваш вопрос, можете ли вы его принять, в левом верхнем углу моего ответа будет пустое галочко, спасибо – EdChum

ответ

2

Я предполагаю, что это то, что вы хотите, поскольку вы не ответили, мы можем создать новую строку, создав dict из zping столбцов df и распознавания списка среднего символа (при условии, что длина имен столбцов равна 3):

In [126]: 

df.append(dict(zip(df.columns, [col[1] for col in df])), ignore_index=True) 
Out[126]: 
      abx   bbx  cbx  acx   bcx 
0 -0.373421 -0.1005462 -0.8280985 -0.1593167 1.335307 
1 1.324328 -0.6189612 -0.743703 0.9419248 1.282682 
2 0.3730312 -0.06697892 1.113707 -0.9691056 1.779643 
3 -0.6644958 1.379606 -0.3751724 -1.135034 0.3287292 
4 0.4406139 -0.5767996 -0.2267589 -1.384412 -0.03038372 
5 -1.242734 -0.838923 -0.6724592 1.405247 -0.3716862 
6 -1.682637 -1.69309 -1.291833 1.781704 0.6321988 
7 -0.5793783 -0.6809975 1.03502 -0.6498381 -1.124236 
8 1.589016 1.272961 -1.968225 0.5515182 0.3058628 
9 -2.275342 2.892237 2.076253 -0.1422845 -0.09776171 
10   b   b   b   c   c 
+0

Да, это отлично работает !!! хотя есть способ указать, какие части строки имени столбца я хочу, каждый из моих фактических имен столбцов длиннее, чем в примере, и я хочу создать новую строку, состоящую из фрагментов имени столбца, например: columname [ 0] [6: 7] + columname [0] [7:11] + columname [0] [24:25] = новое имя столбца, добавляемое к каждой записи строки – akaras222

+0

Вы просто редактируете понимание списка, но вам нужно быть осторожным что вы не индексируете вне диапазона, но да, что все равно будет работать: 'df.append (dict (zip (df.columns, [col [0] + col [6: 7] + col [0] + col [7 : 11] + col [0] + col [24:25] для col in df])), ignore_index = True) ' – EdChum

+0

Примите мой ответ, если он ответит на ваш вопрос, в верхнем левом углу будет отмечена пустая отметка моего ответа – EdChum

0

IX --- позволяет читать весь row-- вы только что сказали, когда-либо грести вы хотите. , тогда вы получаете свои столбцы и назначаете их необработанному вам.

См. Пример ниже.

virData = DataFrame (ДФ)

virData.columns = virData.ix [1] .values ​​

virData.columns

Это работает для меня в IPython и я использую панды