Python 将第一个出现列添加到groupy数据帧

Python 将第一个出现列添加到groupy数据帧,python,pandas,Python,Pandas,我有一个这样的数据框- df=pd.DataFrame({'DT':[1,1,1,2,2,2,1,1],'city':['A','A','A','A','A','A','B','B'],'O':[22,33,44,55,66,77,88,99]}) 现在,对于每个独特的城市,我想把O列中首先出现在Dt列中的所有值相加。 输出- 解释- 对于城市“A”,第一个唯一出现的DT为1,因此我们添加相应的O列值,即22。接下来,对于同一个城市“A”,DT列中第一个出现的2是第4行,因此我们添加其对应的O

我有一个这样的数据框-

df=pd.DataFrame({'DT':[1,1,1,2,2,2,1,1],'city':['A','A','A','A','A','A','B','B'],'O':[22,33,44,55,66,77,88,99]})
现在,对于每个独特的城市,我想把O列中首先出现在Dt列中的所有值相加。 输出-

解释-
对于城市“A”,第一个唯一出现的DT为1,因此我们添加相应的O列值,即22。接下来,对于同一个城市“A”,DT列中第一个出现的2是第4行,因此我们添加其对应的O列==22+55=77。同样地,对于城市B,因为DT列中只有1,所以O将是88。

您需要
删除重复项,然后
分组方式

df1  = (

 df.drop_duplicates(subset=["DT", "city"], keep="first")
    .groupby("city")["O"]
    .sum()
    .reset_index()
)

或者您可以使用双组,首先使用
first
然后使用
sum

df.groupby(["city", "DT"]).first().groupby(level=0).sum().reset_index()

  city   O
0    A  77
1    B  88

您还可以提取第一行并使用
级别进行求和

df.groupby(['DT','city'])['O'].first().sum(level=1)
输出:

city
A    77
B    88
Name: O, dtype: int64
df.groupby(['DT','city'])['O'].first().sum(level=1)
city
A    77
B    88
Name: O, dtype: int64