热线电话:13121318867

登录
2020-08-11 阅读量: 10817
核对前后两期上报数据

数据字段 :

学校名称、学校id、实验项目名称、实验项目经费、负责人


背景:全国202007月收集了,全国各个高效的科研经费数据,由于和实际不符,202008又全部重新收集了数据


需求:(1)要核对前后两次收集的经费的变化,是增还是减、实验项目个数的变化,是增是减(查看每个学校),

(2)对于两次修改了的学校,筛选出来。




34.9213
16
关注作者
收藏
评论(12)

发表评论
lihui15
2020-08-11

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


transform 在这的作用是?

0.0000 0 0 回复
ermutuxia
2020-08-11
#遇到这样的问题应该把每一年的数据查清楚之后再合并数据
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]

image.png

0.0000 0 0 回复
lihui15
2020-08-11

可以,我试试


0.0000 0 0 回复
lihui15
2020-08-11

学校id 实验项目 经费

学校1 项目2 100

学校1 项目2 100

学校1 项目2 400


像这种

0.0000 0 0 回复
ermutuxia
2020-08-11

能举个例子吗,比如什么样的情况,用数据举例说明一下

0.0000 0 0 回复
lihui15
2020-08-11

还要考虑就是实验项目学校可能填的是重复的

0.0000 0 0 回复
lihui15
2020-08-11

这个能理解,赞

0.0000 0 0 回复
ermutuxia
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"))

image.png

#计算各个项目金额差
data并["各个项目金额差"]=data并["金额_2007"]-data并["金额_2008"]
#把项目差不为0的筛选出来
data并[data并["各个项目金额差"]!=0]

image.png

看下这个问题这样解决可以吗?

0.0034 1 0 回复
lihui15
2020-08-11


还要考虑就是实验项目学校可能填的是重复的
0.0000 0 0 回复
lihui15
2020-08-11

要考虑一中情况,就是实验项目可能是重复的

0.0000 0 0 回复
lihui15
2020-08-11

这两个都需要

0.0000 0 0 回复
ermutuxia
2020-08-11

需要详细比较每个学校的每个项目,还是只统计每个学校的项目金额之和,还有项目总个数?

0.0000 0 0 回复
lihui15
2020-08-11

是的


0.0000 0 0 回复
ermutuxia
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","项目名称","金额"])

原始数据是类似于这样的数据框吗?

0.0000 0 0 回复
ermutuxia
2020-08-11

可以认为有data202007和data202008两个数据集吗,然后比较两个数据集的差异?@lihui15

0.0000 0 0 回复
lihui15
2020-08-11

是的

0.0000 0 0 回复