2016-07-13 3 views
3

Предположим, у меня есть два столбца: ID1 и ID2 среди многих других столбцов в кадре данных.Pandas: переназначение значений в dataframe

ID1  |  ID2  | etc. 
123  |  345 
876  |  114 
etc. 

мне нужно изменить значение в ID1 и ID2 таким образом, что ID1 всегда содержат самое низкое целое значение. В этом случае, строка 2 должна быть переключен таким образом, что dataframe выглядит следующим образом:

ID1  |  ID2 
123  |  345 
114  |  876 

Я попытался следующие, который находит случаи, когда ID2 < ID1, но я не знаю, как присвоить значения в этом случае ,

df.loc[df.ID2 < df.ID1, ['ID1','ID2']] = df.loc[df.ID2 < df.ID1, ['ID2','ID1']] 

мне нужно сделать это для того, чтобы объединить эту dataframe с другим dataframe на ID1 и ID2, где значения могут быть aranged таким же образом.

Любые предложения?

ответ

2

это то, что вы хотите?

In [279]: df 
Out[279]: 
    ID1 ID2 ID3 
0 123 345 100 
1 876 114 200 
2 111 222 300 

In [280]: df[['ID1','ID2']] = df[['ID1','ID2']].apply(np.sort, axis=1) 

In [281]: df 
Out[281]: 
    ID1 ID2 ID3 
0 123 345 100 
1 114 876 200 
2 111 222 300 
+0

Да, это работает! Спасибо. Позор я забыл об использовании сортировки ... – chizze

+0

@chizze, добро пожаловать! :) – MaxU

1

Я думаю, более быстрый путь будет:

df2 = df.copy() 
mask = df.ID1 > df.ID2 
df2.ix[mask, 'ID1'] = df.ix[mask, 'ID2'] 
df2.ix[mask, 'ID2'] = df.ix[mask, 'ID1'] 
Смежные вопросы