簡體   English   中英

Pandas - Groupby並創建新的DataFrame?

[英]Pandas - Groupby and create new DataFrame?

這是我的情況 -

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 ,所以我需要groupby這樣一種方式, Fruit中存在的Type

我試過這樣做:

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

我不知道這是不是這樣做,我有點難以理解groupby 如何獲得只有Fruits的新DataFrame

你可以用

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

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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM