Python 如何更清晰地分割熊猫中的数据?

Python 如何更清晰地分割熊猫中的数据?,python,pandas,Python,Pandas,我有我输入到熊猫身上的税收数据,我想看看数据的某些部分,这样我就可以分析这部分人口。我这样做的方式是制作新的数据帧,就像这样 new_df = old_tax_df[(old_tax_df.var_1 == 1) & (old_tax_df.var_2 == 1)] 有没有一种方法可以在不生成数据帧的情况下做到这一点,从而使代码更干净 一种方法- old_tax_df[(old_tax_df[['var_1','var_2']]==1).all(1)] 样本运行- In [68]:

我有我输入到熊猫身上的税收数据,我想看看数据的某些部分,这样我就可以分析这部分人口。我这样做的方式是制作新的数据帧,就像这样

new_df = old_tax_df[(old_tax_df.var_1 == 1) & (old_tax_df.var_2 == 1)]
有没有一种方法可以在不生成数据帧的情况下做到这一点,从而使代码更干净

一种方法-

old_tax_df[(old_tax_df[['var_1','var_2']]==1).all(1)]
样本运行-

In [68]: old_tax_df
Out[68]: 
   var_1  var_2  var_3  var_4
0      0      1      0      1
1      1      1      0      2
2      2      1      1      1
3      1      0      1      2
4      1      2      0      2
5      2      0      1      1
6      2      0      0      2
7      0      2      2      0
8      1      1      0      1
9      2      1      1      1

# Original code
In [69]: old_tax_df[(old_tax_df.var_1 == 1) & (old_tax_df.var_2 == 1)]
Out[69]: 
   var_1  var_2  var_3  var_4
1      1      1      0      2
8      1      1      0      1

# Proposed code
In [70]: old_tax_df[(old_tax_df[['var_1','var_2']]==1).all(1)]
Out[70]: 
   var_1  var_2  var_3  var_4
1      1      1      0      2
8      1      1      0      1

# Alternative using `.eq` to replace `==1`
In [76]: old_tax_df[old_tax_df[['var_1','var_2']].eq(1).all(1)]
Out[76]: 
   var_1  var_2  var_3  var_4
1      1      1      0      2
8      1      1      0      1
一种方法-

old_tax_df[(old_tax_df[['var_1','var_2']]==1).all(1)]
样本运行-

In [68]: old_tax_df
Out[68]: 
   var_1  var_2  var_3  var_4
0      0      1      0      1
1      1      1      0      2
2      2      1      1      1
3      1      0      1      2
4      1      2      0      2
5      2      0      1      1
6      2      0      0      2
7      0      2      2      0
8      1      1      0      1
9      2      1      1      1

# Original code
In [69]: old_tax_df[(old_tax_df.var_1 == 1) & (old_tax_df.var_2 == 1)]
Out[69]: 
   var_1  var_2  var_3  var_4
1      1      1      0      2
8      1      1      0      1

# Proposed code
In [70]: old_tax_df[(old_tax_df[['var_1','var_2']]==1).all(1)]
Out[70]: 
   var_1  var_2  var_3  var_4
1      1      1      0      2
8      1      1      0      1

# Alternative using `.eq` to replace `==1`
In [76]: old_tax_df[old_tax_df[['var_1','var_2']].eq(1).all(1)]
Out[76]: 
   var_1  var_2  var_3  var_4
1      1      1      0      2
8      1      1      0      1
让我们试试这个方法,它更具可读性:

new_df = old_tax_df.query('var_1 == 1 and var_2 == 1')
或者正如MaxU在评论中指出的那样

new_df = old_tax_df.query("var_1 == var_2 == 1")
也会起作用。

让我们试试这个方法,它更具可读性:

new_df = old_tax_df.query('var_1 == 1 and var_2 == 1')
或者正如MaxU在评论中指出的那样

new_df = old_tax_df.query("var_1 == var_2 == 1")
也可以使用。

使用.groupby 您可以使用groupby方法,然后访问这些组

groups = df.groupby(['var_1', 'var_2', 'var_3', 'var_4'])
groups.get_group((2, 0, 0, 2))
这是根据数据帧中的值将一个数据帧分割为多个数据帧的一种方法

使用.loc 将产生相同的结果,只是数据帧现在将在变量字段上建立索引

有关此主题的更多信息,请参见熊猫的文档页面。

使用.groupby 您可以使用groupby方法,然后访问这些组

groups = df.groupby(['var_1', 'var_2', 'var_3', 'var_4'])
groups.get_group((2, 0, 0, 2))
这是根据数据帧中的值将一个数据帧分割为多个数据帧的一种方法

使用.loc 将产生相同的结果,只是数据帧现在将在变量字段上建立索引


有关此主题的更多信息,请参见Pandas的文档页面。

欢迎使用Stack Overflow!您可以先学习并创建一个示例。这使我们更容易帮助您。欢迎使用堆栈溢出!您可以先学习并创建一个示例。我们可以做得更好:df.queryvar_1==var_2==1-使用query看起来很干净,很好!这个答案混合了两种语言。查询语言和python。这通常被认为是不好的做法和干净的代码标准的气味。.query方法可用于将GUI输入管道化到代码中,但不应在生产代码中使用-使用query看起来很干净,很好!这个答案混合了两种语言。查询语言和python。这通常被认为是不好的做法和干净的代码标准的气味。.query方法可用于将GUI输入到代码中,但不应在生产代码中使用。