[英]How to segment data in pandas more cleanly?
我有导入熊猫的税收数据,我想查看数据的某些部分,以便可以分析那部分人口。 我这样做的方法是像这样制作新的数据帧
new_df = old_tax_df[(old_tax_df.var_1 == 1) & (old_tax_df.var_2 == 1)]
有没有一种方法可以在不制作数据帧的情况下使代码更整洁?
让我们尝试.query
方法,它更具可读性:
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")
也会工作。
一种方法-
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
.groupby
您可以使用groupby方法,然后访问组。
groups = df.groupby(['var_1', 'var_2', 'var_3', 'var_4'])
groups.get_group((2, 0, 0, 2))
这是一种基于其中的值将一个数据帧分割为多个数据帧的方法。
.loc
df.set_index(['var_1', 'var_2', 'var_3', 'var_4'], inplace=True)
df.loc[2, 0, 0, 2]
将产生相同的结果,除了现在将在变量字段上对数据帧建立索引。
有关此主题的更多信息,请参见“熊猫的索引和选择数据”文档页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.