我尝试过早问一个问题,但已删除,因此我可以更清楚地询问并显示我要解决的问题。
我的样本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
我希望将其按工作日分组,并且希望每个工作日在最终输出中仅显示一次。
答案 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