我有这个dataframe
x y z parameter
0 26 24 25 Age
1 35 37 36 Age
2 57 52 54.5 Age
3 160 164 162 Hgt
4 182 163 172.5 Hgt
5 175 167 171 Hgt
6 95 71 83 Wgt
7 110 68 89 Wgt
8 89 65 77 Wgt 我使用pandas来获得的最终结果
x y parameter
0 160 164 Hgt
1 182 163 Hgt
2 175 167 Hgt 我使用groupby()根据相同参数Hgt从原始dataframe中提取和隔离行
首先,我添加了一列,将其设置为index。
df = df.insert(0,'index', [count for count in range(df.shape[0])], True)
dataframe的出现是这样的:
index x y z parameter
0 0 26 24 25 Age
1 1 35 37 36 Age
2 2 57 52 54.5 Age
3 3 160 164 162 Hgt
4 4 182 163 172.5 Hgt
5 5 175 167 171 Hgt
6 6 95 71 83 Wgt
7 7 110 68 89 Wgt
8 8 89 65 77 Wgt 然后,我使用以下代码对基于index的列进行分组并提取所需的列:
df1 = df.groupby('index')[['x', 'y','parameter']]
产出如下:
x y parameter
0 26 24 Age
1 35 37 Age
2 57 52 Age
3 160 164 Hgt
4 182 163 Hgt
5 175 167 Hgt
6 95 71 Wgt
7 110 68 Wgt
8 89 65 Wgt 之后,我只使用以下代码隔离Hgt值:
df2 = df1[df1['parameter'] == 'Hgt']
当我运行df2时,我发现了一个错误:
IndexError: Column(s) ['x', 'y', 'parameter'] already selected
我是不是漏掉了什么?如何获得最终结果
发布于 2022-01-03 00:53:43
因为你问你做错了什么,让我指出无用的/坏的代码。
没有任何判断(这只是为了帮助您改进未来的代码),几乎所有的事情都是不正确的。这感觉就像一连串复杂的方法去做无用的事情。让我详细介绍一下:
df = df.insert(0,'index', [count for count in range(df.shape[0])], True)这似乎是一种非常复杂的df.reset_index()方式。即使是[count for count in range(df.shape[0])]也可以通过直接使用range(df.shape[0])来简化。
但是groupby甚至不需要这个步骤,因为您可以按索引级别进行分组:
df.groupby(level=0)但是..。无论如何,groupby是无用的,因为您只有一个成员组。
此外,当你这样做时:
df1 = df.groupby('index')[['x', 'y','parameter']]df1不是,不是,而是DataFrameGroupBy对象。当您知道要做什么时,将其存储在变量中是非常有用的,但是,这在您的情况下会导致错误,因为您认为这是一个DataFrame。您需要应用DataFrameGroupBy对象的聚合或转换方法来获得一个DataFrame,而您没有这样做(很可能是因为,如上面所示,在单成员组上没有什么有趣的事情可做)。
所以当你跑步时:
df1[df1['parameter'] == 'Hgt']同样,一切都是错误的,因为df1['parameter']等同于df.groupby('index')[['x', 'y','parameter']]['parameter'] (当您选择两次“参数”时,错误的原因)。即使删除了此错误,等式比较也会给出单个True/False,因为您仍然拥有DataFrameGroupBy而不是DataFrame,这将错误地尝试对不存在的DataFrameGroupBy列进行子选择。
希望能帮上忙!
发布于 2022-01-02 23:07:35
你真的需要groupby吗
>>> df.loc[df['parameter'] == 'Hgt', ['x', 'y', 'parameter']].reset_index(drop=True)
x y parameter
0 160 164 Hgt
1 182 163 Hgt
2 175 167 Hgthttps://stackoverflow.com/questions/70560335
复制相似问题