2015-06-25 5 views
0

Сай, у меня есть DataFrame вроде этого:Создание панд столбца DataFrame из выбранных значений из другого столбца

df = pd.DataFrame({'a' : list('abcdefghij'), 'b' : (5*[2] + 5*[3])}) 

И я хочу, чтобы создать еще один столбец, который содержит эти значения из столбца 'a', которые индексируются в колонке 'b' (5 раз 'c' и 5 раз 'd'). Тогда, казалось бы естественным для меня, чтобы сделать что-то вроде этого:

df['c'] = df['a'].iloc[df['b']] 

Но выдает ошибку:

cannot reindex from a duplicate axis 

Мой вопрос заключается в

а) как я могу это сделать?

b) Где я могу узнать о фактической механике индексов Панды, в отличие от интуиции?

+0

Я не совсем понимаю, что вы хотите, 'df [df ['a']. Isin (df ['b'])]' вернет значения 'a', которые присутствуют в 'b' но вы, кажется, переписываете «b» с по существу теми же значениями – EdChum

+0

@EdChum Я предполагаю, что присвоение одному столбцу и использование значений для 'a', которые идентичны индексу, были немного обманчивыми. Я изменил вопрос; это имеет смысл? –

+0

Я все еще не понимаю, какой ожидаемый результат вы хотите, если вы просто хотите значения соответствующих столбцов (исключая индексы), вы можете просто использовать '.values':' df ['c'] = df ['a' ] .iloc [df ['b']]. values' – Anzel

ответ

0

Если я вас правильно понял вы хотите:

In [219]: 
df['c'] = df.loc[df['b'],'a'].values 
df 

Out[219]: 
    a b c 
0 a 2 c 
1 b 2 c 
2 c 2 c 
3 d 2 c 
4 e 2 c 
5 f 3 d 
6 g 3 d 
7 h 3 d 
8 i 3 d 
9 j 3 d 

Как почему вы получаете «не может проиндексировать от дубликата оси», если вы заметили, что это возвращение:

In [220]: 
df.loc[df['b'],'a'] 

Out[220]: 
2 c 
2 c 
2 c 
2 c 
2 c 
3 d 
3 d 
3 d 
3 d 
3 d 
Name: a, dtype: object 

Затем он должен ясно, почему это стонет, значения индекса повторяются, а pandas пытается выровнять индекс по сравнению с вашим исходным df, чтобы обойти это, вы можете получить необработанные значения в виде массива np, вызвав атрибут .values:

In [221]: 
df.loc[df['b'],'a'].values 

Out[221]: 
array(['c', 'c', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd'], dtype=object) 
Смежные вопросы