python按指定条件筛选_Python之根据条件筛选特定⾏
转载于博主flash胜龙的⽂章,感谢博主的总结与分享。
⼀、选取⼏列组成新的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参数后
upby(by=['CITY']).groups
打印出来会是带group标签和原数据⾏标签(也就是原来dataframe⾥⾯对应⾏的index)的组合信息:
{'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]我们可以看到,按照groups来print,得出city为北京的情况下,对应原来的⾏标签第25998⾏、26134⾏等
即使指定了某列:
upby(by=['CITY'])['QUANTITY'].groups
依然会得出相同的结果:
{'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]除⾮我们把每个分组的所有⾏都整理成⼀⾏,如⽤sum来求和:
upby(by=['CITY'])['QUANTITY'].sum()
这样就可以成功转换成dataframe了:
CITY
BEIJING 5
SHANGHAI 207
CHENGDU 518
……
汇总说明如下:
print '----------NEW------------\n', upby(by=['CITY']))
print '----------NEW------------\n', upby(by=['CITY']).sum())
print '----------NEW------------\n', upby(by=['CITY'])['QUANTITY'])
print '----------NEW------------\n', upby(by=['CITY'])['QUANTITY'].sum())
所得结果为:
----------NEW------------
----------NEW------------
----------NEW------------
----------NEW------------
说明:
⼀个dataframe经过groupby以后得到的类型是upby.DataFrameGroupBy。⽽⽤for in循环取出的每个项的类型是frame.DataFrame
⼀个dataframe经过groupby再进⾏sum以后仍然是dataframe(不过具体通过那⼀列来sum有待考证)
⼀个dataframe经过groupby以后再进⾏列选取,得到的是upby.SeriesGroupBy类型。可知⽤for in循环取出的是series.Series
⼀个series经过groupby再进⾏sum以后仍然是series
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论