【问题标题】:How to create a new variable based on the fourth observation of a different variable如何根据对不同变量的第四次观察创建新变量
【发布时间】:2022-01-23 12:00:48
【问题描述】:

从这张表

   ID, Date,  Value
    A    Jan01     5      
    A    Feb01     10     
    A    Mar03     9      
    A    Apr02     7      
    A    Jan01     2      
    B    Feb01     3      
    B    Mar01     6   
    B    Mar01     9    
    B    Mar02     5      

想要的表:

  ID, Date,  Value, New_Variable
   A    Jan01     5      7
   A    Feb01     10     7
   A    Mar03     9      7
   A    Apr02     7      7
   A    Jan01     2      5
   B    Feb01     3      5
   B    Mar01     6      5
   B    Mar01     9      5
   B    Mar02     5      5

我知道我能做到

df.groupby('ID')['Value'].transform('first')

如果我想取第一个值,那么其他行呢?像第四个还是第五个?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我们可以按ID 对数据框进行分组,然后将transformValue 列与nth 分组,以从每个组中选择第n 个值。

    df['new_col'] = df.groupby('ID')['Value'].transform('nth', n=3)
    

    print(df)
    
      ID   Date  Value  new_col
    0  A  Jan01      5        7
    1  A  Feb01     10        7
    2  A  Mar03      9        7
    3  A  Apr02      7        7
    4  A  Jan01      2        7
    5  B  Feb01      3        5
    6  B  Mar01      6        5
    7  B  Mar01      9        5
    8  B  Mar02      5        5
    

    注意:n 的值是从零开始的,因此要选择 4th 行,您必须指定 n=3

    【讨论】:

    • 是的!这个。谢谢!!知道它必须很简单。谢谢:)
    • @Olivia 编码快乐!
    【解决方案2】:

    一个想法是添加一个排名列以显示一行在其组中的哪个位置。例如:

    df['rank'] = df.groupby('ID').cumcount()
    

    在这种情况下,您知道每个 ID 的第 4 位。

    fourth_place = df[df['rank']==3]
    

    以便您可以创建映射

    mapping = fourth_place.set_index('ID')['Value']
    

    可用于创建新列

    df['New_Variable'] = df['ID'].map(mapping)
    

    【讨论】:

    • 谢谢雷蒙德。没有简单的方法可以在“转换”之后添加一行吗?对于一个看似简单的想法,这似乎需要很多步骤。
    • @Shubham Sharma 提出了这个建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2013-10-30
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多