Python之根據條件篩選特定行


轉載於博主flash勝龍的文章,感謝博主的總結與分享。

原博客鏈接https://blog.csdn.net/u010770993/article/details/70312506

一、選取幾列組成新的dataframe:
  df = df[['A列列名', 'S列列名', 'H列列名']]

二、選取某列'STATUS'里面元素為"ACTIVE"的行,即刪掉列STATUS元素不是ACTIVE的行
  df = df[df['STATUS'] == "ACTIVE"]
 (單項條件搜索,類似SELECT ALL WHERE df.STATUS = ACTIVE)

三、選取'BADTHING'列為元素空的行,即去掉BADTHING所在列中的空行所在行數據,組成一個新的dataframe
  df = df[df['BADTHING'].isnull()]
 (空值搜索)

四、選取GOODREASON列元素為列表['quality', 'cheap']內元素的行,即可用特定列表內容進行篩選
  df = df[df['GOODREASON'].isin(['quality', 'cheap'])]
 (多項條件搜索,類似SELECT ALL WHERE df.GOODREASON= quality AND cheap)

五、分組並進行遍歷,運用groupby和for:
  groupByNew = df.groupby('CITY', sort=False)
  for name, groupData in groupByNew:
    # TODO …… ……
  如代碼所示,我們可以對dataframe以某列'CITY'進行分組。我們如何取出某組的數據呢?當然是用
  for循環。取出來的name即是組名,而groupData同樣是一個dataframe,可以進行更進一步操作。

六、對Series數據進行排序:
  series= series.sort_values(ascending=False)  # 進行從大到小排序

進階:關於groupby的一些信息:
  在進行groupby運算后,直接打印會得一個object信息,添加groups參數后
  print df.groupby(by=['CITY']).groups
  打印出來會是帶group標簽和原數據行標簽(也就是原來dataframe里面對應行的index)的組合信息:
  {'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]
  我們可以看到,按照groups來print,得出city為北京的情況下,對應原來的行標簽第25998行、26134行等
  即使指定了某列:
  print df.groupby(by=['CITY'])['QUANTITY'].groups
  依然會得出相同的結果:
  {'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]
  除非我們把每個分組的所有行都整理成一行,如用sum來求和:
  print df.groupby(by=['CITY'])['QUANTITY'].sum()
  這樣就可以成功轉換成dataframe了:
  CITY
  BEIJING        5
  SHANGHAI  207
  CHENGDU   518
  ……

匯總說明如下:
print '----------NEW------------\n', type(df.groupby(by=['CITY']))
print '----------NEW------------\n', type(df.groupby(by=['CITY']).sum())
print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'])
print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'].sum())
所得結果為:
----------NEW------------
----------NEW------------
----------NEW------------
----------NEW------------
說明:
一個dataframe經過groupby以后得到的類型是pandas.core.groupby.DataFrameGroupBy。而用for in循環取出的每個項的類型是pandas.core.frame.DataFrame
一個dataframe經過groupby再進行sum以后仍然是dataframe(不過具體通過那一列來sum有待考證)
一個dataframe經過groupby以后再進行列選取,得到的是pandas.core.groupby.SeriesGroupBy類型。可知用for in循環取出的是pandas.core.series.Series
一個series經過groupby再進行sum以后仍然是series


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM