我有一个如下所示的数据框:
company Amazon Apple Yahoo
name
A 0 130 0
C 173 0 0
Z 0 0 150
Run Code Online (Sandbox Code Playgroud)
它是使用以下代码创建的:
import pandas as pd
df = pd.DataFrame({'name' : ['A', 'Z','C'],
'company' : ['Apple', 'Yahoo','Amazon'],
'height' : [130, 150,173]})
df = df.pivot(index="name", columns="company", values="height").fillna(0)
Run Code Online (Sandbox Code Playgroud)
我想要做的是name根据预定义的列表对行(带索引)进行排序["Z", "C", "A"].结果如下:
company Amazon Apple Yahoo
name
Z 0 0 150
C 173 0 0
A 0 130 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Zer*_*ero 71
您可以使用reindexlike 设置预定义订单的索引
In [14]: df.reindex(["Z", "C", "A"])
Out[14]:
company Amazon Apple Yahoo
Z 0 0 150
C 173 0 0
A 0 130 0
Run Code Online (Sandbox Code Playgroud)
但是,如果它是字母顺序,您可以使用 sort_index(ascending=False)
In [12]: df.sort_index(ascending=False)
Out[12]:
company Amazon Apple Yahoo
name
Z 0 0 150
C 173 0 0
A 0 130 0
Run Code Online (Sandbox Code Playgroud)
如下所示,您需要将其分配给某个变量
In [13]: df = df.sort_index(ascending=False)
Run Code Online (Sandbox Code Playgroud)
小智 12
我们还可以使用loc:
lst = ["Z", "C", "A"]
df = df.loc[lst]
Run Code Online (Sandbox Code Playgroud)
输出:
company Amazon Apple Yahoo
name
Z 0 0 150
C 173 0 0
A 0 130 0
Run Code Online (Sandbox Code Playgroud)
请注意,如果 中 存在lst不存在的值df.index(例如 if lst=['Z','C','A','D']),则loc抛出 KeyError (而reindex创建一个充满 NaN 的新行'D')。
如果df是MultiIndex,如:
C3
C1 C2
2 evelen 0
ten 1
twelve 2
1 evelen 3
ten 4
twelve 5
Run Code Online (Sandbox Code Playgroud)
ten如果您想按,eleven和排序第二级twelve,则使用loc:
out = df.loc[:, ['ten','evelen', 'twelve'],:]
Run Code Online (Sandbox Code Playgroud)
输出:
C3
C1 C2
2 evelen 0
ten 1
twelve 2
1 evelen 3
ten 4
twelve 5
Run Code Online (Sandbox Code Playgroud)
对于两个级别:
out = df.loc[[1,2], ['ten','evelen','twelve'], :]
Run Code Online (Sandbox Code Playgroud)
输出:
C3
C1 C2
1 ten 4
evelen 3
twelve 5
2 ten 1
evelen 0
twelve 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51862 次 |
| 最近记录: |