这是我的情况 -
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
。如何获得仅DataFrame
的新Fruits
?
答案 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)]