Pandas - Groupby并创建新的DataFrame?

Com*_*low 6 python grouping data-analysis pandas

这是我的情况 -

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
Run Code Online (Sandbox Code Playgroud)

我想要做的只是创建一个数据框Fruits,所以我需要groupby这样的方式Fruit存在于Type.

我试过这样做:

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

我不知道这是不是这样做,我有点难以理解groupby.我如何才能获得新DataFrameFruits

unu*_*tbu 6

你可以用

data[data['Type'].str.contains('Fruit')]
Run Code Online (Sandbox Code Playgroud)
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')])
Run Code Online (Sandbox Code Playgroud)

产量

     Item           Type
0  Orange  Edible, Fruit
1  Banana  Edible, Fruit
Run Code Online (Sandbox Code Playgroud)

  • 不同之处在于这些操作实际上略有不同.contains更像是这样:``reg = re.compile('Fruit'); data [data ['Type'].apply(lambda x:bool(reg.search(x)))``(还包含句柄``nan`` (4认同)

Joe*_*ton 5

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

['a', 'b', 'a', 'c', 'b', 'b']
Run Code Online (Sandbox Code Playgroud)

类似于:

[['a', 'a'], ['b', 'b', 'b'], ['c']]
Run Code Online (Sandbox Code Playgroud)

你想要的是什么df.apply.

在较新版本中,pandas有一种query方法可以使这更有效,更容易.

然而,做你想做的事就是通过使用来制作一个布尔数组

mask = df.Type.apply(lambda x: 'Fruit' in x)
Run Code Online (Sandbox Code Playgroud)

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

df[df.Type.apply(lambda x: 'Fruit' in x)]
Run Code Online (Sandbox Code Playgroud)

作为一个完整的例子:

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)]
Run Code Online (Sandbox Code Playgroud)