数据字段 :
学校名称、学校id、实验项目名称、实验项目经费、负责人
背景:全国202007月收集了,全国各个高效的科研经费数据,由于和实际不符,202008又全部重新收集了数据
需求:(1)要核对前后两次收集的经费的变化,是增还是减、实验项目个数的变化,是增是减(查看每个学校),
(2)对于两次修改了的学校,筛选出来。
34.9213
5
16
关注作者
收藏
发表评论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","项目名称","金额"])
原始数据是类似于这样的数据框吗?

