感谢datawhale开展的每月组队学习,教材ref: 第六章:连接
关系型连接
方向连接
类连接操作
练习
Ex1:美国疫情数据集
现有美国4月12日至11月16日的疫情报表,请将 New York 的 Confirmed, Deaths, Recovered, Active 合并为一张表,索引为按如下方法生成的日期字符串序列:
In [61]: date = pd.date_range('20200412', '20201116').to_series()
In [62]: date = date.dt.month.astype('string').str.zfill(2
....: ) +'-'+ date.dt.day.astype('string'
....: ).str.zfill(2) +'-'+ '2020'
....:
In [63]: date = date.tolist()
In [64]: date[:5]
Out[64]: ['04-12-2020', '04-13-2020', '04-14-2020', '04-15-2020', '04-16-2020']
我太菜了写不出来😢,我来解读一下code把
L = [] for d in date: #因为数据是按照天数分开一个一个存在一个文件夹里的(每个csv文件都含有当天的所有地区covid数据),我们在题目中已经获得了那些csv文件名称了 #于是我们这里可以用一个for 循环去一个一个把文件读出来(暂时命名为df) #这里要记得传入参数index_col='Province_State',把索引设为state,因为我们在下一步做loc索引器的时候要取出行索引为New York的 df = pd.read_csv('data/us_report/' + d + '.csv', index_col='Province_State') # 因为上一步里我们取到的数据是包含所有state的,但是我们目前只关心New York的数据 # 所以我们可以用loc索引器(第三章)去把纽约的数据取出来 # 复习一下loc知识: loc[行的选择,列的选择] # 我们这里行的选择为:纽约的行;列的选择为:使用list选择多列 # 现在我们就从原表df得到了过滤出我们所需要信息的series序列(data) data = df.loc['New York', ['Confirmed','Deaths','Recovered','Active']] # 上一步获得的是New York那一行,返回的是个序列,我们需要把它转成dataframe # 使用to_frame() method返回的是,列是New York,行是['Confirmed','Deaths','Recovered','Active'] # 所以我们需要转置一下,然后append到list里面(学到了) L.append(data.to_frame().T) # 因为我们已经把所有天的New York数据全部放到一个list里了,我们可以直接用concat函数 # 纵向拼接成一个表 res = pd.concat(L) # 因为我们append的时候也是按照date的顺序for loop append的 # 所以我们可以直接把date赋给dataframe做索引 res.index = date res.head()
Ex2:实现join函数
请实现带有 how 参数的 join 函数
-
假设连接的两表无公共列
-
调用方式为 join(df1, df2, how=“left”)
-
给出测试样例