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