【问题标题】:How to use the values in a column to identify which column to analyse in a different dataframe?如何使用列中的值来识别要在不同数据框中分析的列?
【发布时间】:2019-05-13 16:31:36
【问题描述】:

我有两个 pandas 数据框,一个带有原始数据,另一个是基于第一个数据框的数据分析的分析输出。设置如下:

df1
P1T P2T P3T
P   N   P
N   P   U
P   P   U
U   U   N

df2
Indicator  Indicator State   Occurrences
P1T        P
P1T        N
P1T        U
P2T        P
P2T        N
P2T        U
P3T        P
P3T        N
P3T        U

df1中,每一列代表一个“指标”,每个指标可以有三种状态:“P”、“N”或“U”。

df2 列出了每个“指标”和它可以具有的状态范围,每个代表不同的情况。然后应该计算每个案例的出现次数并在“出现次数”列中输出该数字。也就是说,

df2
Indicator   Indicator State   Occurrences
P1T         P                 2
P1T         N                 1
P1T         U                 1
P2T         P                 2
P2T         N                 1
P2T         U                 1
P3T         P                 1
P3T         N                 1
P3T         U                 2

是否可以使用df2['Indicators'] 列中的值指定df1 中的列进行计数,然后使用df2['Indicator State'] 列中的值提供'countif' 条件?

【问题讨论】:

    标签: python pandas dataframe analysis


    【解决方案1】:

    meltgroupby 一起使用,将sizeMultiIndex Series 一起使用:

    df3 = (df1.melt(var_name='Indicator', value_name='Indicator State')
             .groupby(['Indicator','Indicator State'])
             .size()
             .rename('Occurrences'))
    

    value_countsunstack 的另一种解决方案:

    df3 = df1.apply(lambda x: x.value_counts()).unstack().rename('Occurrences')
    

    print (df3)
    Indicator  Indicator State
    P1T        N                  1
               P                  2
               U                  1
    P2T        N                  1
               P                  2
               U                  1
    P3T        N                  1
               P                  1
               U                  2
    Name: Occurrences, dtype: int64
    

    最后join改成原来的DataFrame

    #if necessary remove only NaN column 
    df2 = df2.drop('Occurrences', axis=1)
    df2 = df2.join(df3, on=['Indicator','Indicator State'])
    print (df2)
      Indicator Indicator State  Occurrences
    0       P1T               P            2
    1       P1T               N            1
    2       P1T               U            1
    3       P2T               P            2
    4       P2T               N            1
    5       P2T               U            1
    6       P3T               P            1
    7       P3T               N            1
    8       P3T               U            2
    

    【讨论】:

    • 谢谢!这正是我一直在寻找的,就像一个魅力:)
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多