ValueError:无法从重复轴重新索引

时间:2016-02-07 19:03:56

标签: python pandas

假设我有两个数据帧:

import string
import pandas as pd

d = {'one': pd.Series(range(26), index = list(string.ascii_lowercase)),
     'two': pd.Series([1., 2., 3., 4.], index = ['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

d2 = {'one': pd.Series(range(10), index = range(11, 21))}
df2 = pd.DataFrame(d2)

现在,我有一个索引列表:

np.random.seed(12)
i = np.random.choice(np.arange(11, 21), size = 26)

现在,我想基于df2加入df1 i

df['new_col'] = df2['one'][i]

但是我得到了上面提到的错误。解决此问题的一种方法是直接将i添加到df1,并在i中创建一个名为df2的列来表示index,然后执行此操作一个merge但似乎非常低效。有更好的方法吗?

我知道有几个问题有相同的标题,但没有一个对我的案例有任何帮助。

2 个答案:

答案 0 :(得分:5)

您可以使用tolist方法将df2.one转换为列表,然后将其分配给df['new_col']

df['new_col'] = df2['one'][i].tolist()

修改

或者您可以使用.values属性作为评论中建议的@ajcr更快:

df['new_col'] = df2['one'][i].values

<强>时序

In [100]: %timeit df2.one[i].tolist()
1000 loops, best of 3: 275 µs per loop

In [101]: %timeit df2.one[i].values
1000 loops, best of 3: 252 µs per loop

答案 1 :(得分:1)

设置索引以使用&#39; i&#39;中生成的值,然后根据该索引将df2连接到df:

df = df.set_index(i)
df['new_col'] = df2['one']