数据字段 :
学校名称、学校id、实验项目名称、实验项目经费、负责人
背景:全国202007月收集了,全国各个高效的科研经费数据,由于和实际不符,202008又全部重新收集了数据
需求:(1)要核对前后两次收集的经费的变化,是增还是减、实验项目个数的变化,是增是减(查看每个学校),
(2)对于两次修改了的学校,筛选出来。








data202007["重复次数"]=data202007["学校id"].groupby([data202007["学校id"],data202007["项目名称"]]).transform(lambda x:x.count()-1)
transform 在这的作用是?

#遇到这样的问题应该把每一年的数据查清楚之后再合并数据 import pandas as pd #如果某个学校的某个项目有重复的记录,就像现在这样,应该把他找出来并进行适当处理(具体由业务决定) #7月A学校项目1有重复记录 data202007=pd.DataFrame([["A学校","项目1",300], ["A学校","项目1",500], ["B学校","项目1",200], ["B学校","项目2",300]],columns=["学校id","项目名称","金额"]) #可以看到A学校项目1有一次重复,我们想要找出这样的情况。可以生成一列重复次数。 data202007["重复次数"]=data202007["学校id"].groupby([data202007["学校id"],data202007["项目名称"]]).transform(lambda x:x.count()-1) #通过对重复次数进行筛选,找到重复的数据 data202007[data202007["重复次数"]>0]

先解决你第一个问题:计算每个学校各个项目的金额差。
import pandas as pd data202007=pd.DataFrame([["A学校","项目1",300], ["A学校","项目2",500], ["B学校","项目1",200], ["B学校","项目2",300]],columns=["学校id","项目名称","金额"]) data202008=pd.DataFrame([["A学校","项目1",200], ["A学校","项目2",500], ["B学校","项目1",200], ["B学校","项目2",300], ["B学校","项目3",200]],columns=["学校id","项目名称","金额"])
#将两个数据框进行横向合并 data并=pd.merge(data202007,data202008, on =["学校id","项目名称"],how="outer", suffixes=("_2007","_2008"))
#计算各个项目金额差 data并["各个项目金额差"]=data并["金额_2007"]-data并["金额_2008"]
#把项目差不为0的筛选出来 data并[data并["各个项目金额差"]!=0]
看下这个问题这样解决可以吗?

import pandas as pd
data202007=pd.DataFrame([["A学校","项目1",300],
["A学校","项目1",500],
["B学校","项目1",200],
["B学校","项目2",300]],columns=["学校id","项目名称","金额"])
data202008=pd.DataFrame([["A学校","项目1",200],
["A学校","项目1",500],
["B学校","项目1",200],
["B学校","项目2",300],
["B学校","项目3",200]],columns=["学校id","项目名称","金额"])
原始数据是类似于这样的数据框吗?