[英]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.