繁体   English   中英

Pandas groupby diff 删除列

[英]Pandas groupby diff removes column

我有一个这样的 dataframe:

d = {'id': ['101_i','101_e','102_i','102_e'], 1: [3, 4, 5, 7], 2: [5,9,10,11], 3: [8,4,3,7]}
df = pd.DataFrame(data=d)

去向

我想减去具有相同前缀 id 的所有行,即用 101_e 减去 101_i 行的所有值,反之亦然。 我为此使用的代码是:

df['new_identifier'] = [x.upper().replace('E', '').replace('I','').replace('_','') for x in df['id']]
df = df.groupby('new_identifier')[df.columns[1:-1]].diff().dropna()

我得到这样的 output:

df2

我看到我丢失了我创建的新列new_identifier 有什么办法可以保留它吗?

您可以为已知类型(在本例中为 int 或 float)的列定义特定聚合 function(在本例中为第 1、2 和 3 列的np.diff() )。

import numpy as np
df.groupby('new_identifier').agg({i: np.diff for i in range(1, 4)}).dropna()

结果:

                1  2  3
new_identifier         
101             1  4 -4
102             2  1  4

Series.str.split获取组,你需要DataFrame.set_axis() before GroupBy ,之后我们使用GroupBy.diff

cols = df.columns.difference(['id'])
groups = df['id'].str.split('_').str[0]

new_df = (

df.set_axis(groups, axis=0)
.groupby(level=0)
[cols]
.diff()
.dropna()
)

print(new_df)
       1    2    3
id                
101  1.0  4.0 -4.0
102  2.0  1.0  4.0

细节组

df['id'].str.split('_').str[0]

0    101
1    101
2    102
3    102
Name: id, dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM