用整数值索引 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
编辑
这很奇怪,但似乎 append
到 Series
不能正常工作(至少在版本 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
我有两个 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
编辑
这很奇怪,但似乎 append
到 Series
不能正常工作(至少在版本 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