我在一个名为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
答案 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名称,例如00Apple032
,0Bean032
等,如上所示。并且,value
将具有每个键的实际行。
因此,您可以将每个(key,value)
视为一个数据帧,并检查每个数据帧是否具有x,如下所示:
for key, value in grouped:
print(value[value['Building'].str.contains(x)])
## do more stuff
让我知道这是否有帮助。