有条件地组合特定行并将输出添加到Pandas中的现有行

0ve6wy6x  于 2023-01-11  发布在  其他
关注(0)|答案(2)|浏览(98)

假设我有以下 Dataframe :

data = {'age' :[10,11,12,11,11,10,11,13,13,13,14,14,15,15,15],
        'num1':[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],
        'num2':[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]}
df = pd.DataFrame(data)

我想对年龄为14岁和15岁的行求和,并将这些新值保留为年龄为14岁。我的预期输出如下所示:

age time1 time2
1   10    10    20
2   11    11    21
3   12    12    22
4   11    13    23
5   11    14    24
6   10    15    25
7   11    16    26
8   13    17    27
9   13    18    28
10  13    19    29
11  14   110   160

在下面的代码中,我尝试了group.by age,但它对我不起作用:

df1 =df.groupby(age[age >=14])['num1', 'num2'].apply(', '.join).reset_index(drop=True).to_frame()
wbrvyc0a

wbrvyc0a1#

limit_age = 14
new = df.query("age < @limit_age").copy()
new.loc[len(new)] = [limit_age,
                     *df.query("age >= @limit_age").drop(columns="age").sum()]
  • 首先获取“14岁之前” Dataframe
  • 然后将其分配到一个新行,其中
  • 年龄为14岁
  • 其他值是“14之后” Dataframe 的行方式总和

得到

>>> new

    age  num1  num2
0    10    10    20
1    11    11    21
2    12    12    22
3    11    13    23
4    11    14    24
5    10    15    25
6    11    16    26
7    13    17    27
8    13    18    28
9    13    19    29
10   14   110   160

new.index += 1可用于末尾从1开始的索引。)

iklwldmw

iklwldmw2#

我会使用遮罩和concat

m = df['age'].isin([14, 15])

out = pd.concat([df[~m],
                 df[m].agg({'age': 'min', 'num1': 'sum', 'num2': 'sum'})
                      .to_frame().T
                ], ignore_index=True)

输出:

age  num1  num2
0    10    10    20
1    11    11    21
2    12    12    22
3    11    13    23
4    11    14    24
5    10    15    25
6    11    16    26
7    13    17    27
8    13    18    28
9    13    19    29
10   14   110   160

相关问题