pandas 如何理解panda DataFrame.loc的空秒参数

mfpqipee  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(125)

您好,我正在寻求帮助,以了解pandas DataFrame.loc方法没有/没有空的第二个参数所导致的行为
请考虑以下几点:

df=pd.DataFrame(index=pd.MultiIndex.from_tuples([('a', 1, 'x'),('a', 2, 'y'),('b', 1, 'x')]), data={'col_1':[1, 2, 3]})
df

输出:
| | | | 列_1|
| - ------| - ------| - ------| - ------|
| 项目a| 1个|x| 1个|
| | 第二章|Y型|第二章|
| b.人口基金|1个|x|三个|
如果我使用df.loc[(slice(None), 1, slice(None))]访问行,则返回的结果具有不同的索引:
| | | 列_1|
| - ------| - ------| - ------|
| 项目a| x| 1个|
| b.人口基金|x|三个|
保留元组值为slice(None)的索引列,并删除显式指定值的索引列。
但是,如果我在限制元组后面放一个逗号,索引就会被保留:df.loc[(slice(None), 1, slice(None)),]产量:
| | | | 列_1|
| - ------| - ------| - ------| - ------|
| 项目a| 1个|x| 1个|
| b.人口基金|1个|x|三个|
如果有人能解释输入(slice(None), 1, slice(None))(slice(None), 1, slice(None)),的差异以及为什么这会导致输出的差异,我将不胜感激

bxgwgixi

bxgwgixi1#

这里Pandas正在等待您指定第二个条件,以下面的例子,其中第二列被添加。

import pandas as pd

tuples = [('a', 1, 'x'),('a', 2, 'y'),('b', 1, 'x')]
data1 = {'col_1':[1, 2, 3],'col_2':[4, 5, 6]}

df=pd.DataFrame(index=pd.MultiIndex.from_tuples(tuples), data=data1 )

x = df.loc [ ( slice(None), 1, slice(None) ) ]
y = (df.loc [ ( slice(None), 1, slice(None) ) , 'col_2' ])
z = (df.loc [ ( slice(None), 1, slice(None) ) , 'col_2' ]).loc [ ( slice(None), 1, slice(None) ) ]

print('2 Indexes here \n' ,x,'\n',x.index,'\n')
print('3 indexes here \n' ,y,'\n',y.index,'\n')
print('2 indexes here \n' ,z,'\n',z.index)
Outputs :
2 Indexes here 
      col_1  col_2
a x      1      4
b x      3      6 
MultiIndex([('a', 'x'),('b', 'x')],) 

3 indexes here 
a  1  x    4
b  1  x    6
Name: col_2, dtype: int64 
MultiIndex([('a', 1, 'x'),('b', 1, 'x')],) 

2 indexes here 
a  x    4
b  x    6
Name: col_2, dtype: int64 
MultiIndex([('a', 'x'),('b', 'x')],)

第一次没有逗号的时候,你说你只需要df. loc [(slice(None),1,slice(None))],所以panda显示了a和x。
如果你指定你想要的,比如说print(df. loc [(slice(None),1,'x')]

It will output only 1 index because you have made it clear what you want.
   col_1  col_2
a      1      4
b      3      6 
Index(['a', 'b'], dtype='object')

而在第二个时间片中,你提到你特别想要第二列!所以Pandas显示了第一个和第二个索引。
希望我解释清楚!

相关问题