Pandas - Groupby并创建新的DataFrame?

时间:2014-01-06 14:15:37

标签: python pandas grouping data-analysis

这是我的情况 -

In[1]: data
Out[1]: 
     Item                    Type
0  Orange           Edible, Fruit
1  Banana           Edible, Fruit
2  Tomato       Edible, Vegetable
3  Laptop  Non Edible, Electronic

In[2]: type(data)
Out[2]: pandas.core.frame.DataFrame

我想要做的是创建一个仅Fruits的数据框,因此我需要groupbyFruit中存在Type的方式。

我试过这样做:

grouped = data.groupby(lambda x: "Fruit" in x, axis=1)

我不知道这是不是这样做,我有点难以理解groupby。如何获得仅DataFrame的新Fruits

2 个答案:

答案 0 :(得分:6)

您可以使用

data[data['Type'].str.contains('Fruit')]

import pandas as pd

data = pd.DataFrame({'Item':['Orange', 'Banana', 'Tomato', 'Laptop'],
                     'Type':['Edible, Fruit', 'Edible, Fruit', 'Edible, Vegetable', 'Non Edible, Electronic']})
print(data[data['Type'].str.contains('Fruit')])

产量

     Item           Type
0  Orange  Edible, Fruit
1  Banana  Edible, Fruit

答案 1 :(得分:5)

groupby完全做了别的事情。它创建聚合组。基本上,它来自:

['a', 'b', 'a', 'c', 'b', 'b']

类似于:

[['a', 'a'], ['b', 'b', 'b'], ['c']]

你想要的是df.apply

在较新版本的pandas中,有一种query方法可以提高效率和效率。

然而,做你想做的就是使用

创建一个布尔数组
mask = df.Type.apply(lambda x: 'Fruit' in x)

然后使用df[mask]选择数据框的相关部分。或者,作为一个单行:

df[df.Type.apply(lambda x: 'Fruit' in x)]

作为一个完整的例子:

import pandas as pd
data = [['Orange', 'Edible, Fruit'],
        ['Banana', 'Edible, Fruit'],
        ['Tomato', 'Edible, Vegtable'],
        ['Laptop', 'Non Edible, Electronic']]
df = pd.DataFrame(data, columns=['Item', 'Type'])

print df[df.Type.apply(lambda x: 'Fruit' in x)]