2017-01-31 4 views
3

У меня есть набор данных, как это:Заполните колонку в цикле

import pandas as pd 
df = pd.DataFrame([[0, 0], [2,2] ], columns=('feature1', 'feature2')) 

Теперь я хотел бы добавить дополнительный столбец

df['c'] = "" 

А затем цикл trought data.frame для заполнения столбец C с содержимым обоих признаков 1 и признака 2

for index, row in df.iterrows(): 
    subject = row["feature1"] 
    content = row["feature2"] 
    row["C"] = subject, content 

Однако, если я печатаю рамку данных сейчас. Кажется, что-то не так, потому что столбец C пуст.

+0

Извините, что вы пытаетесь установить здесь? Вы пытаетесь установить кортеж? измените последнюю строку на это: 'df.loc [index," c "] = subject, content' – EdChum

ответ

2

EdChum вы указали в комментариях, как исправить свой подход - вы должны использовать .loc для индексирования. Однако можно добиться того же гораздо проще и без необходимости использовать итерацию строк, используя zip.

In[43]: df['c'] = list(zip(df.feature1, df.feature2)) 
in[44]: df 
Out[44]: 
    feature1 feature2  c 
0   0   0 (0, 0) 
1   2   2 (2, 2) 
4

Если вы хотите построить кортеж из двух столбцов, быть явным и держать его просто:

df['c'] = df.apply(tuple, axis=1) 

df 
Out[7]: 
    feature1 feature2  c 
0   0   0 (0, 0) 
1   2   2 (2, 2) 
+0

Хорошо, мне это больше, чем мой ответ, +1 – miradulo

0

Вы никогда не обновляется исходный столбец. Вы только что обновили переменную с именем row. Но для простоты запоминания кода (не самый эффективный, очевидно):

df['C'] = zip(df.feature1, df.feature2) 
+0

это работает в python 2, но не python 3. @ Mitch's Ответ работает для обоих. – piRSquared

2
df.assign(c=df.set_index(['feature1', 'feature2']).index.to_series().values) 
+0

Сделано, это интересно, спасибо! – miradulo

+0

Я нахожусь на уровне +/- 5% для обоих методов, если учесть задание: вы платите много, чтобы перейти от списка к Серии, прежде чем назначать «c». Кроме того, без назначения я нахожу только 10-кратный фактор. pandas 0.19.1 python 3.5.2 64 бит. – Boud

+0

в порядке, отклонение от начальных 50к строк для меня – Boud

Смежные вопросы