【问题标题】:Panda(Python): add a new column in a data frame which depends on its row value and aggregated value from another data framePanda(Python):在数据框中添加一个新列,该列取决于其行值和来自另一个数据框的聚合值
【发布时间】:2021-03-01 11:06:48
【问题描述】:

我是 python 和 pandas 的新手,所以我的怀疑也很愚蠢。

问题:

所以我有两个数据框让我们说df1 和df2 在哪里

df1 就像

   treatment1 treatment2     value           comparision    test          adjustment  statsig   p_value
0   Treatment    Control  0.795953     Treatment:Control  t-test  Benjamini-Hochberg    False  0.795953
1  Treatment2    Control  0.795953    Treatment2:Control  t-test  Benjamini-Hochberg    False  0.795953
2  Treatment2  Treatment  0.795953  Treatment2:Treatment  t-test  Benjamini-Hochberg    False  0.795953

而df2 就像

     group_type  metric
0     Treatment    31.0
1    Treatment2    83.0
2     Treatment    51.0
3     Treatment    20.0
4       Control    41.0
..          ...     ...
336  Treatment3    35.0
337  Treatment3     9.0
338  Treatment3    35.0
339  Treatment3     9.0
340  Treatment3    35.0

我想在df1 哪里添加一列mean_percentage_lift

lift_mean_percentage = (mean(treatment1)/mean(treatment2) -1) * 100

where `treatment1` and `treatment2` can be anything in `[Treatment, Control, Treatment2]`

我的方法:

我正在使用数据框的assign函数。

df1.assign(mean_percentage_lift = lambda dataframe: lift_mean_percentage(df2, dataframe['treatment1'], dataframe['treatment2']))

在哪里

def lift_mean_percentage(df, treatment1, treatment2):
    treatment1_data = df[df[group_type_col] == treatment1]
    treatment2_data = df[df[group_type_col] == treatment2]
    mean1 = treatment1_data['metric'].mean()
    mean2 = treatment2_data['metric'].mean()
    return (mean1/mean2 -1) * 100

但我收到此错误Can only compare identically-labeled Series objects for line treatment1_data = df[df[group_type_col] == treatment1]。有什么我做错了吗?有什么替代方法吗?

【问题讨论】:

    标签: python pandas dataframe scipy statistics


    【解决方案1】:

    对于数据框 df2:

       group_type   metric
    0   Treatment   31.0
    1   Treatment2  83.0
    2   Treatment   51.0
    3   Treatment   20.0
    4   Control     41.0
    5   Treatment3  35.0
    6   Treatment3  9.0
    7   Treatment   35.0
    8   Treatment3  9.0
    9   Control     5.0
    

    你可以试试:

    def lift_mean_percentage(df, T1, T2):
          treatment1= df['metric'][df['group_type']==T1].mean()
          treatment2= df['metric'][df['group_type']==T2].mean()
          return (treatment1/treatment2 -1) * 100
    

    运行:

    lift_mean_percentage(df2,'Treatment2','Control')
    

    结果:

    260.8695652173913
    

    【讨论】:

    • 问题出在lift_mean_percentage(df2,'Treatment2','Control')Treatment2和Control是变量,需要从df1传过来。
    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 2021-04-13
    • 1970-01-01
    • 2019-04-22
    • 2020-04-27
    • 2021-08-25
    • 2020-12-20
    • 2021-06-06
    相关资源
    最近更新 更多