【发布时间】:2019-09-20 11:15:30
【问题描述】:
我想使用两列对数据框进行分组,然后过滤小于某个阈值的结果,然后取平均值的比率。
例子:
grouped_df = df_test[["bool_column", "A", "B",
"C", "filter_column"]].groupby(["filter_column", "bool_column"])
grouped_df.describe()
这给了我类似的东西:
bool_column A B C
filter_column
Name1 True <stats> <stats> <stats> [count = 4]
False <stats> <stats> <stats> [count = 2]
Name2 True <stats> <stats> <stats> [count = 3]
False <stats> <stats> <stats> [count = 1]
我现在想过滤掉 count
bool_column A B C
filter_column
Name1 True <stats> <stats> <stats> [count = 4]
False <stats> <stats> <stats> [count = 2]
Name2 True <stats> <stats> <stats> [count = 3]
在此之后,我想取列 A、B 和 C 的均值比率。那是对于每个过滤器列,我需要
colA[True].mean / colb[False].mean
我还是无法让过滤器工作。我尝试了以下方法:
grouped_df2 = grouped_df.filter(lambda x: len(x) > 1)grouped_df2 = grouped_df2.stack()grouped_df = grouped_df.filter(lambda x: len(x) > 0)
获得比率的方法如下:
df = grouped_df['A'].mean().unstack('bool_column')
df = df[(df[True] > 0) & (df[False] > 0)]
df['ratio'] = df[True] / df[False]
df = df.drop(columns=[True,False])
df.plot(kind='bar')
【问题讨论】:
-
删除一些行后,你想如何计算比率?例如。在您的示例中,Name2 没有 False。
-
我会忽略它,我不需要在输出中使用它。 @Shaido
标签: python pandas lambda filter pandas-groupby