Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用“分组依据”选择特定的子组_Python_Pandas - Fatal编程技术网

Python 使用“分组依据”选择特定的子组

Python 使用“分组依据”选择特定的子组,python,pandas,Python,Pandas,我有一个熊猫数据框,格式如下: id grp values1 values2 0 1 a_1 2 4 1 1 a_2 3 6 2 1 b_1 4 8 3 2 b_2 5 10 4 2 c_1 6 12 5 3 z_1 7 14 6 4 y_1 8 16 7 5 a_1 9

我有一个熊猫数据框,格式如下:

id grp values1 values2 0 1 a_1 2 4 1 1 a_2 3 6 2 1 b_1 4 8 3 2 b_2 5 10 4 2 c_1 6 12 5 3 z_1 7 14 6 4 y_1 8 16 7 5 a_1 9 18 8 5 a_2 10 20 9 5 a_1 11 22 10 5 a_2 12 24 11 7 z_1 13 26 12 8 q_1 14 28 13 9 a_2 15 30 14 9 a_1 16 32
感谢您的考虑、时间和投入

或者您可以采取更简单的方式:

 filtered_df  = df.ix[(df['grp'] == 'a_1') | (df['grp'] == 'a_2')]

您只需在数据框中搜索条件:

reduced_df  = df[(df['grp'] == 'a_1') | (df['grp'] == 'a_2')]
我设法做到了这样的“偶数”解决方案,也许不是最有效的,但它完成了任务:

# One row per id
pivot = df[['id', 'grp', 'values1']].pivot_table('values1', index = 'id', columns = 'grp', aggfunc = (lambda i: i.size)).reset_index()

# Take out the id rows which fulfills condition of being even numbers
pivot2 = pivot[pivot[['a_1', 'a_2']].sum(axis = 1) %2 == 0].reset_index()

# Sub-select rows from original table
df[df['id'].isin(pivot2['id'])]

在钱的问题上,我知道ix方法,但没有以这种直截了当的方式想到它。假设我也想包括id组1,它有1个grp。值不同于其他值,同时不采用任何其他包含额外值的grp,即“b_1”。此外,数字需要为偶数,因为我的数据中有三行,即“a_1”、“a_1”和“a_2”,并且该id不应包含在缩减的数据框中!我不明白你的意思,如果你想添加另一个条件,请按照上面的模板添加另一个条件,这样你就会被拒绝。对于第二个问题,如果您正在谈论重置索引,请尝试df.reset\u index(drop=True,inplace=True)
reduced_df  = df[(df['grp'] == 'a_1') | (df['grp'] == 'a_2')]
# One row per id
pivot = df[['id', 'grp', 'values1']].pivot_table('values1', index = 'id', columns = 'grp', aggfunc = (lambda i: i.size)).reset_index()

# Take out the id rows which fulfills condition of being even numbers
pivot2 = pivot[pivot[['a_1', 'a_2']].sum(axis = 1) %2 == 0].reset_index()

# Sub-select rows from original table
df[df['id'].isin(pivot2['id'])]