熊猫:在数据框中重新分配值

时间:2016-07-13 13:42:45

标签: python sorting pandas merge

假设我在数据帧的许多其他列中有两列,ID1和ID2。

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

我需要重新排列ID1和ID2中的值,使ID1始终包含最小的整数值。在这种情况下,应该切换第2行,使数据框看起来像这样:

ID1      |      ID2
123      |      345
114      |      876

我尝试了以下内容,找到了ID2< ID1,但我不知道在这种情况下如何分配值。

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

我需要这样做才能将此数据帧与ID1和ID2上的另一个数据帧合并,其中值可能不会以相同的方式排列。

有什么建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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']