从另一列的选定值创建pandas DataFrame列

时间:2015-06-25 12:39:53

标签: python pandas

说,我有一个像这样的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)我在哪里可以了解熊猫指数的实际机制,而不是直觉?

1 个答案:

答案 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