我熟悉熊猫,我想用一些简单的例子来学习逻辑。
我们假设我有以下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
我尝试了熊猫教程,但我仍然有一些奇怪的行为,所以直接询问似乎是一个更好的主意。
谢谢!
答案 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]