使用熊猫从字典中拉出键

时间:2014-03-06 23:09:58

标签: dictionary pandas ipython

我已经知道你可以从pandas中的字典对象中提取特定键,如果你已经知道键的确切值,但是如果你想在不知道值的情况下拉出字典的中值键值(或者在这种情况下) ,作者姓名)?

离。

author name:   books:                                year:
fred           how to fish                           2010
               how to bike                           2012
               how to skate                          2009
bob            sam I am                              1990
george         white fang                            1980
               animals and I                         2000
ted            a guide to computer programming       1984
harry          the future queen                      1812

所以我希望获得中间作者姓名。有五位作者,所以第三位作者是我想要的(乔治),只打印与他相关的所有数据。然后我最终还要打印他出版的书籍数量(两个)。我是否必须将字典对象转换回csv文件或其他东西?任何人都知道关于熊猫字典对象的提示或有用的教程会很棒,谢谢!

2 个答案:

答案 0 :(得分:1)

如果您正在使用整数/浮点列,那么您可以使用中值方法:

In [11]: df['year:'].median()
Out[11]: 1995.0

但是,对于一列字符串来说,这没有明确定义,至少使用正常定义*。

如果您只想要“中间”项目,那么就接受(我不确定您想要用抽奖做什么......):

In [12]: df['author name:'].iloc[int(len(df) / 2.)]
Out[12]: 'george'

注意:在这种情况下,实际上 是抽奖...

或者你可以得到唯一的名字(按照给出的顺序,忽略重复的顺序),再次你不得不担心抽奖:

In [13]: names = df['author name:'].unique()

In [14]: names
Out[14]: array(['fred', 'bob', 'george', 'ted', 'harry'], dtype=object)

In [15]: names[int(len(names) / 2.)]
Out[15]: 'george'

*'bob'和'george'之间的中途是什么?

答案 1 :(得分:1)

我在完成一个教程后发现的解决方案(链接发布在答案底部)

df = pd.read_csv('location', etc...)  #### data taken from csv file
stats1 = df.groupby('author name').agg({'books': [np.size]})
x = int(len(stats1) / 2.)
print stats1[(x-1):(x)]

基于本教程: http://www.gregreda.com/2013/10/26/using-pandas-on-the-movielens-dataset/