用整数值索引 pandas 系列

indexing pandas series with an integer value

我有两个 pandas 系列如下。

bulk_order_id
Out[283]: 
3    523
Name: order_id, dtype: object

luster_6_loc
Out[285]: 
3    Cluster 3
Name: Clusters, dtype: object

现在我想要一个看起来像这样的新系列。

Cluster 3  523

我在python

关注
cluster_final = pd.Series()
for i in range(len(cluster_6_loc)):
    cluster_final.append(pd.Series(bulk_order_id.values[i], index =  
    cluster_6_loc.iloc[i]))

这给我一个错误说

TypeError: Index(...) must be called with a collection of some kind, 'Cluster 3' was passed

不确定我是否正确理解了你的问题,但是 pd.concat() 有什么问题 (see docs):

s1 = pd.Series(data=['523'], index=[3])

3    523
dtype: object

s2 = pd.Series(data=['Cluster 3'], index=[3])

3    Cluster 3
dtype: object

并使用 pd.concat(),这也适用于多个值:

pd.concat([s1, s2], axis=1)

     0          1
3  523  Cluster 3

导致 DataFrame,这正是您在将 Series 与多个值组合时可能需要的。您可以使用 .set_index() 将任何 values 移动到 index,或者添加 .squeeze() 以获得 Series

所以 pd.concat([s1, s2], axis=1).set_index(1) 给出:

             0
1             
Cluster 3  523

您可以将 luster_6_loc 的值作为索引传递给 pd.Series,将 bulk_order_id 的值作为值传递给:

bulk_order_id = pd.Series(523, index=[3])
cluster_6_loc= pd.Series('Cluster 3', index=[3])

cluster_final = pd.Series(bulk_order_id.values, cluster_6_loc.values)

In [149]: cluster_final 
Out[149]:
Cluster 3    523
dtype: int64

编辑

这很奇怪,但似乎 appendSeries 不能正常工作(至少在版本 0.17.1 中):

s = pd.Series()

In [199]: s.append(pd.Series(1, index=[0]))
Out[199]:
0    1
dtype: int64

In [200]: s
Out[200]: Series([], dtype: float64)

顺便说一下,对于你的情况,你可以做 set_value:

cluster_final = pd.Series()
for i in range(len(cluster_6_loc)):
    cluster_final.set_value(cluster_6_loc.iloc[i], bulk_order_id.values[i])

In [209]: cluster_final
Out[209]:
Cluster 3    523
dtype: int64

也许更好的方法是使用 concat and set_index:

print bulk_order_id

1    523
2    528
3    527
4    573
Name: order_id, dtype: object

print cluster_6_loc

1    Cluster 1
2    Cluster 2
3    Cluster 3
4    Cluster 4
Name: Clusters, dtype: object

cluster_final = pd.concat([bulk_order_id, cluster_6_loc], axis=1).set_index('Clusters')
#reset index name
cluster_final.index.name = ''

print cluster_final.ix[:,0]

Cluster 1    523
Cluster 2    528
Cluster 3    527
Cluster 4    573
Name: order_id, dtype: object