#遇到这样的问题应该把每一年的数据查清楚之后再合并数据 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]
lihui15
2020-08-11
先解决你第一个问题:计算每个学校各个项目的金额差。
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]
看下这个问题这样解决可以吗?
lihui15
2020-08-11
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","项目名称","金额"])
原始数据是类似于这样的数据框吗?
lihui15
2020-08-11