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.我如何才能获得新DataFrame的Fruits?
你可以用
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)
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)
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |