与切片和聚合表有关的基本熊猫问题

时间:2015-02-11 23:55:17

标签: python pandas

我熟悉熊猫,我想用一些简单的例子来学习逻辑。

我们假设我有以下panda DataFrame对象:

import pandas as pd
d = {'year':pd.Series([2014,2014,2014,2014], index=['a','b','c','d']),
     'dico':pd.Series(['A','A','A','B'], index=['a','b','c','d']),
     'mybool':pd.Series([True,False,True,True], index=['a','b','c','d']),
     'values':pd.Series([10.1,1.2,9.5,4.2], index=['a','b','c','d'])}
df = pd.DataFrame(d)

基本问题。 如何将列作为列表。 即,d['year'] 会回来

[2013,2014,2014,2014]

问题0 如何将行'a'和'b'以及列'year'和'values'作为新的dataFrame? 如果我尝试:

d[['a','b'],['year','values']]

它不起作用。

问题1。

我如何按年份汇总(总和/平均)值列,以及dico列。即,不会添加不同年份/ dico组合,但基本上mybool将从列表中删除。

即,在聚合(这种情况下是平均值)后,我应该得到:

tipo  values               year
A      10.1                2013
A      (9.5+1.2)/2         2014
B      4.2                 2014

如果我尝试使用groupby函数,它似乎会输出一些奇怪的新DataFrame结构,其中包含bool,以及所有可能的年份/ dico组合 - 我的目标是让我在上面显示更简单的新切片和更小的数据帧。

问题2 。如何按条件过滤?

即,我想过滤掉所有错误的bool列。 它会回来:

tipo   values               year   mybool
A      10.1                2013    True
A      9.5                 2014    True
B      4.2                 2014    True

我尝试了熊猫教程,但我仍然有一些奇怪的行为,所以直接询问似乎是一个更好的主意。

谢谢!

1 个答案:

答案 0 :(得分:1)

列表中系列的值:

df['year'].values #returns an array

loc允许您按索引标签对日期框进行子集化:

df.loc[['a','b'],['year','values']]

分组依据允许您对列进行汇总:

df.groupby(['year','dico'],as_index=False).mean() #don't have 2013 in your df

按列值过滤:

df[df['mybool']==True]