Pandas-Groupby并创建新的DataFrame?[英] Pandas - Groupby and create new DataFrame?

本文是小编为大家收集整理的关于Pandas-Groupby并创建新的DataFrame?的处理方法,想解了Pandas-Groupby并创建新的DataFrame?的问题怎么解决?Pandas-Groupby并创建新的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)]

本文地址:https://www.itbaoku.cn/post/1727974.html