按日期分组列并将功能应用于分组依据

时间:2019-05-29 20:17:23

标签: python python-3.x pandas data-science data-analysis

我尝试过早问一个问题,但已删除,因此我可以更清楚地询问并显示我要解决的问题。

我的样本df是

    day         a   b
  5/11/19       3   1
  5/11/19       4   6
  5/12/19       1   2
  5/12/19       5   9
  5/13/19      11   14

我想按天列分组,并希望有一个新的df来计算col a和col b的值数<10 /该天和列(a或b)的所有值作为a %。由于每天都有很多行。

我正在尝试

def calc_(group_df):
result = dict()
result["x"] = group_df[(group_df.x) < 10] / len(group_df.x)
result["y"] = group_df[(group_df.y) < 10] / len(group_df.y)
return pd.Series(result, index=["x", "y"])

然后

df.groupby("day").apply(calc)

但我收到

的错误

TypeError:无法对163的块值不支持的操作数类型进行163143操作:'str'和'int'

我想念什么吗?

我想要我的最终输出

     day         a   b
  5/11/19       .3  .1
  5/12/19       .5  .9
  5/13/19       .1  .4

我希望将其按工作日分组,并且希望每个工作日在最终输出中仅显示一次。

1 个答案:

答案 0 :(得分:1)

我不确定您希望最终数据帧的外观如何,但是您可以执行此操作。

使用此数据框作为输入:

       day   a   b
0  5/11/19   3   1
1  5/11/19  11   3
2  5/12/19   5   9
3  5/13/19  11  14

def calc(df):

    len_a_under_10 = (df['a'] < 10).sum() / len(df['a'])
    len_b_under_10 = (df['b'] < 10).sum() / len(df['b'])

    df['a_under_10'] = len_a_under_10
    df['b_under_10'] = len_b_under_10

return df

df.groupby('day').apply(calc)

礼物:

       day   a   b  a_under_10  b_under_10
0  5/11/19   3   1         0.5         1.0
1  5/11/19  11   3         0.5         1.0
2  5/12/19   5   9         1.0         1.0
3  5/13/19  11  14         0.0         0.0