我需要一种在熊猫分组数据框中搜索的方法

时间:2018-11-29 04:02:38

标签: python pandas dataframe

我在一个名为data.xlsx的excel文件中有一个类似于以下数据集的数据集

Building           name    salary
00Apple032           Bob     50000
00Apple032           James   30000
0Bean032            James   30000
0Soda987            Alex    0
0Bean032            Bryon   32000

ive从数据中创建了两个数据帧。

df = pd.read_excel('data.xlsx', sheet_name='Sheet1, dtype=str)

grouped_df = pd.read_excel('data.xlsx', sheet_name='Sheet1, dtype=str)
grouped = grouped_df.groupby("Building")[["Building", "name", "salary']]

在我继续这里之前..我创建原始df以及grouped_df(均为数据帧)的原因...我不确定将分组功能应用于原始df并将其分配给单行代码(如下一行)上的新变量将以某种方式干扰原始数据并在该行上造成麻烦。那可能是不准确的。

grouped = df.groupby("Builing")[["Building", "name", "salary']]

任何人。就我所知,此分组数据框与普通数据框不同。该类型列为

  

pandas.core.groupby.groupby.DataFrameGroupBy

在未分组的普通数据帧上,我可以执行以下操作:

x = input("search for: ")
df[df['Building'].str.contains(x)]]

但是,在分组数据帧上,此操作无效。

我要解决的问题是我-我需要允许在此分组数据框中进行搜索以打印组,但是用户不知道确切的名称。苹果正在寻找吗?或00Apples ..您可以看到问题。

虽然我可以用以下方式查询数据:

grouped.get_group('00Apples032')

我没有办法让某人能够通过诸如str.contains之类的东西来搜索该群体。

我尝试过的

grouped[grouped["Building"].str.contains("Apples")]

错误

exception: Columns already selected  

1 个答案:

答案 0 :(得分:0)

假设您将原始数据帧分组在Building上:

grouped = df.groupby("Building")

这将创建一个groupby对象。您可以像下面这样遍历该对象:

for key, value in grouped:
    print(key, value)
    ## Do your stuff here

00Apple032
     Building   name  salary
0  00Apple032    Bob   50000
1  00Apple032  James   30000
0Bean032
   Building   name  salary
2  0Bean032  James   30000
4  0Bean032  Bryon   32000
0Soda987
   Building  name  salary
3  0Soda987  Alex       0

在此情况下,key将具有唯一的Buidling名称,例如00Apple0320Bean032等,如上所示。并且,value将具有每个键的实际行。

因此,您可以将每个(key,value)视为一个数据帧,并检查每个数据帧是否具有x,如下所示:

for key, value in grouped:
    print(value[value['Building'].str.contains(x)])
    ## do more stuff

让我知道这是否有帮助。