这个问题有两个阶段。
我有一个MultiIndex
,例如:
import pandas as pd
d = {'category': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c'],
'colour': ['red', 'blue', 'green', 'orange', 'red', 'blue', 'green', 'orange', 'red', 'blue', 'green', 'orange'],
'amount': [28.1, 5.6, 43.6, 13.3, 4.1, 27.6, 19.7, 37.5, 26.7, 73.7, 94.4, 77.5],
'scalar': [3.4, 2.8, 3.4, 1.7, 2.2, 0.8, 1.9, 0.3, 2.4, 0.2, 0.5, 1.5]}
df = pd.DataFrame(d)
df.set_index(['category', 'colour'], inplace=True)
结果是:
amount scalar
category colour
a red 28.1 3.4
blue 5.6 2.8
green 43.6 3.4
orange 13.3 1.7
b red 4.1 2.2
blue 27.6 0.8
green 19.7 1.9
orange 37.5 0.3
c red 26.7 2.4
blue 73.7 0.2
green 94.4 0.5
orange 77.5 1.5
第1阶段
我想选择colour
为green
的所有行,而不考虑category
。我敢肯定它非常简单,但无法解决。
结果应如下所示:
amount scalar
category colour
a green 43.6 3.4
b green 19.7 1.9
c green 94.4 0.5
第二阶段
将所有amount
行的所有green
值乘以10。
结果将是:
amount scalar
category colour
a red 28.1 3.4
blue 5.6 2.8
green 436.0 3.4
orange 13.3 1.7
b red 4.1 2.2
blue 27.6 0.8
green 197.0 1.9
orange 37.5 0.3
c red 26.7 2.4
blue 73.7 0.2
green 944.0 0.5
orange 77.5 1.5
谢谢
答案 0 :(得分:3)
df.xs('green', level='colour', drop_level=False)
amount scalar
category colour
a green 43.6 3.4
b green 19.7 1.9
c green 94.4 0.5
答案 1 :(得分:2)
在此处使用query
df.query('colour == "green"')
amount scalar
category colour
a green 43.6 3.4
b green 19.7 1.9
c green 94.4 0.5
答案 2 :(得分:2)
我将使用IndexSlice
df.loc[pd.IndexSlice[:,'green'],:]
Out[86]:
amount scalar
category colour
a green 43.6 3.4
b green 19.7 1.9
c green 94.4 0.5
答案 3 :(得分:1)
尝试:
df[df.index.get_level_values(level=1) =='green']
输出:
amount scalar
category colour
a green 43.6 3.4
b green 19.7 1.9
c green 94.4 0.5