【问题标题】:Pandas combining same row into new column while preserving the row(not a simple group-by)熊猫将同一行合并到新列中,同时保留该行(不是简单的分组)
【发布时间】:2017-10-16 14:10:05
【问题描述】:

我是熊猫初学者,需要一些帮助。

我有以下熊猫数据框:

ID         Val-A   Val-B

aab12      lower   -30
dbc11      lower   -10
aab12      upper   50
dbc11      upper   20

我想从前一个数据框生成一个新的数据框,但想不出办法:

ID         Val-A  Val-B  upper-lower
aab12      lower  -30    80
aab12      upper  50     80
dbc11      lower  -10    30
dbc11      upper  20     30   

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas numpy data-analysis


    【解决方案1】:

    我认为您首先需要 sort_valuesreset_index 以获得良好的单调唯一索引,然后是 transformabssum

    df = df.sort_values('ID').reset_index(drop=True)
    df['upper-lower'] = df['Val-B'].abs().groupby(df['ID']).transform(sum)
    
    print (df)
          ID  val-A  Val-B  upper-lower
    0  aab12  lower    -30           80
    1  aab12  upper     50           80
    2  dbc11  lower    -10           30
    3  dbc11  upper     20           30
    

    【讨论】:

    • 如果是50,30,(非负数):-)
    • 我需要它来处理底片这就是为什么我给出了这个确切的例子......
    • @Tom - 那么可以使用abs 吗?
    • 如果 abs 解决了这个问题,那么是的,我指的是@Wen 所说的
    【解决方案2】:

    假设你有两个正数:

    df['upper-lower']=df.groupby('ID')['Val-B'].apply(lambda x : x.diff().abs().bfill())
    df.sort_values('ID')
    Out[394]: 
          ID  Val-A  Val-B  upper-lower
    0  aab12  lower    -30         80.0
    2  aab12  upper     50         80.0
    1  dbc11  lower    -10         30.0
    3  dbc11  upper     20         30.0
    

    【讨论】:

      猜你喜欢
      • 2022-12-08
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 2020-06-11
      • 2022-08-18
      • 2023-02-07
      相关资源
      最近更新 更多