这些方法在对熊猫数据帧进行过滤和分组方面有什么区别?

时间:2019-10-31 12:57:03

标签: python pandas dataframe

我想知道以下方法在筛选和使用groupby for Pandas数据帧方面有什么区别。

以下是数据框:

df.head()

   | category | active | value
-------------------------------
 0 |       A  |     0  |    8
-------------------------------
 1 |       B  |     0  |    4
-------------------------------
 2 |       B  |     1  |    8
-------------------------------
 3 |       E  |     1  |    8
-------------------------------
 4 |       A  |     0  |    6

1。过滤

使用

有什么明显区别吗?
df[df.active==1].head()

df[df['active']==1].head()

两者给出的结果相同:

    | category | active | value
-------------------------------
  2 |       B  |     1  |    8
-------------------------------
  3 |       E  |     1  |    8
-------------------------------
  7 |       E  |     1  |    6
-------------------------------
  9 |       B  |     1  |    4
-------------------------------
 10 |       E  |     1  |    2

2。分组

使用

df.groupby('category')[['value']].sum()

给予

category | value
-----------------
      A  |   130
-----------------
      B  |   148 
-----------------
      C  |    63 
-----------------
      D  |    57 
-----------------
      E  |   107 

但是同样的事情,但列名称周围没有双方括号

df.groupby('category')['value'].sum()

给予

category
A    130
B    148
C     63
D     57
E    107
Name: value, dtype: int64

2 个答案:

答案 0 :(得分:0)

df["columnname"]df.columnname等价于访问列,只应使用索引符号进行分配。出于OP中的目的,没有区别。

df[["columnname"]]返回仅包含一列的数据帧,而df["columnname"]返回一个序列。双括号表示法将列表作为索引传递,这意味着您可以一次获取多列并以这种方式获取子Dataframe。

答案 1 :(得分:0)

  1. 过滤

    df[df.active==1] and df[df['active']==1] are same.
    recommend to use df['column_name'] (sometimes column names can be function names)
    
  2. 分组

    df.groupby('category')[['value']].sum()
    
    if you are using 2D list then it returns a pandas dataframe, where category column will be a column.
    
    
     df.groupby('category')['value'].sum()
    
     Here, it returns a pandas series with category values as index