说,我有一个像这样的DataFrame:
df = pd.DataFrame({'a' : list('abcdefghij'), 'b' : (5*[2] + 5*[3])})
我想要创建另一个列,其中包含列'a'
中的值,这些值在列'b'
中编入索引(5次' c'和5次' d& #39)。然后,对我来说这样做似乎很自然:
df['c'] = df['a'].iloc[df['b']]
但这会产生错误:
cannot reindex from a duplicate axis
我的问题是
a)我该怎么做?
b)我在哪里可以了解熊猫指数的实际机制,而不是直觉?
答案 0 :(得分: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对齐,为了解决这个问题,你可以通过调用{{1}来获取原始值作为np数组} attribute:
.values