根据复杂条件对Pandas DataFrame中的行进行分组

时间:2017-04-14 14:52:30

标签: python pandas where-clause multiple-tables multi-level

我有一个基本的数据框,结构如下:

             Col1
Ind1 Ind2
0    key1    12
     key2    35
1    key3    56
     key4    24
     key5    65

......和另一个这样的人:

    ColA
0   key1
1   else
2   else
3   key3

我需要的是df1的平均值,根据Ind2是否在df2中分组。 这是我试过没有成功的事情;消息sais"长度必须匹配才能比较" - 但当然,他们没有。

df1 = pd.DataFrame({'ind1': [0, 0, 1, 1, 1], 'ind2': ['key1', 'key2', 'key3', 'key4', 'key5'], 'col1': [12, 35, 56, 24, 65]}, )
df1.set_index(['ind1', 'ind2'], inplace=True)
df2 = pd.DataFrame({'ColA': ['key1', 'else', 'else', 'key3']})

print (df1.groupby(df1.index.levels[1] in df2.get_values()).mean())

提前感谢任何暗示!

1 个答案:

答案 0 :(得分:1)

您实际上想要检查df1.index.levels[1]的元素是否在df2.ColA中(因为您需要每行的值)。你写的语法不会让你这么做。相反,你应该尝试

df1.groupby(df1.index.levels[1].isin(df2.ColA)).mean()

请注意isin函数为每个元素返回True / False,以及我直接引用df2.ColA的事实,因为它是包含值(反映到df2会搜索df2列名称中的值。