与切片和聚合表相关的基本熊猫问题
basic panda questions related to slicing and aggregating tables
我正在熟悉 Pandas,我想通过几个简单的例子来学习其中的逻辑。
假设我有以下熊猫 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']
会 return
[2013,2014,2014,2014]
问题 0
如何将行 'a' 和 'b' 以及列 'year' 和 'values' 作为新的数据帧?
如果我尝试:
d[['a','b'],['year','values']]
没用。
问题一
我将如何聚合 (sum/average) 值列,例如按年份和 dico 列。即,不会添加不同的 years/dico 组合,但基本上 mybool 将从列表中删除。
即,聚合后(本例平均值)我应该得到:
tipo values year
A 10.1 2013
A (9.5+1.2)/2 2014
B 4.2 2014
如果我尝试使用 groupby 函数,它似乎会输出一些奇怪的新 DataFrame 结构,其中包含 bool,以及所有可能的 years/dico 组合 - 我的 objective 宁愿有更简单的新切片和我在上面显示的较小的数据框。
问题 2。如何按条件过滤?
即,我想过滤掉所有为 False 的 bool 列。
它会 return:
tipo values year mybool
A 10.1 2013 True
A 9.5 2014 True
B 4.2 2014 True
我试过 panda 教程,但我仍然遇到一些奇怪的行为,所以直接询问似乎是个更好的主意。
谢谢!
列表中系列的值:
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]
我正在熟悉 Pandas,我想通过几个简单的例子来学习其中的逻辑。
假设我有以下熊猫 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']
会 return
[2013,2014,2014,2014]
问题 0 如何将行 'a' 和 'b' 以及列 'year' 和 'values' 作为新的数据帧? 如果我尝试:
d[['a','b'],['year','values']]
没用。
问题一
我将如何聚合 (sum/average) 值列,例如按年份和 dico 列。即,不会添加不同的 years/dico 组合,但基本上 mybool 将从列表中删除。
即,聚合后(本例平均值)我应该得到:
tipo values year
A 10.1 2013
A (9.5+1.2)/2 2014
B 4.2 2014
如果我尝试使用 groupby 函数,它似乎会输出一些奇怪的新 DataFrame 结构,其中包含 bool,以及所有可能的 years/dico 组合 - 我的 objective 宁愿有更简单的新切片和我在上面显示的较小的数据框。
问题 2。如何按条件过滤?
即,我想过滤掉所有为 False 的 bool 列。 它会 return:
tipo values year mybool
A 10.1 2013 True
A 9.5 2014 True
B 4.2 2014 True
我试过 panda 教程,但我仍然遇到一些奇怪的行为,所以直接询问似乎是个更好的主意。
谢谢!
列表中系列的值:
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]