【问题标题】:Group rows in Pandas DataFrame based on complex condition根据复杂条件对 Pandas DataFrame 中的行进行分组
【发布时间】:2017-04-14 14:52:29
【问题描述】:

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

             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 中进行分组。 这是我尝试但没有成功的方法;消息是“长度必须匹配才能比较”——但当然,它们不匹配。

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())

提前感谢您的任何提示!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 2020-10-27
      • 2021-08-05
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      相关资源
      最近更新 更多