pandas——合并

pandas——合并

问题

【问题一】 请思考什么是append/assign/combine/update/concat/merge/join各自最适合使用的场景。

  1. append:可以利用Series或DataFrame添加行。
  2. assign:添加列。例子同上。
  3. combine:利用规则在表中填充另一个表的数据
  4. update:按索引来覆盖更新数据
  5. concat:行/列两个方向拼接两个表。
  6. merge:横向拼接(笛卡尔积方式),适用于多级索引的情况
  7. join:同上。
    【问题二】 merge_ordered和merge_asof的作用是什么?和merge是什么关系?
  8. merge_ordered:函数允许组合时间序列和其他有序数据。 特别是它有一个可选的fill_method关键字来填充/插入缺失的数据。
  9. merge_asof除了我们匹配最近的键而不是相等的键之外,其他的都类似于有序的left-join 。
    对于左侧DataFrame中的每一行,我们选择右侧DataFrame中on键对应的值小于left的键对应的值的最后一行。 两个DataFrame必须按键排序。
    【问题三】 请构造一个多级索引与多级索引合并的例子,尝试使用不同的合并函数。
    【问题四】 上文提到了连接的笛卡尔积,那么当连接方式变化时(inner/outer/left/right),这种笛卡尔积规则会相应变化吗?请构造相应例子。

练习

【练习一】有2张公司的员工信息表,每个公司共有16名员工,共有五个公司,请解决如下问题:
(a) 每个公司有多少员工满足如下条件:既出现第一张表,又出现在第二张表。
(b) 将所有不符合(a)中条件的行筛选出来,合并为一张新表,列名与原表一致。
© 现在需要编制所有80位员工的信息表,对于(b)中的员工要求不变,对于满足(a)条件员工,它们在某个指标的数值,取偏离它所属公司中满足(b)员工的均值数较小的哪一个,例如:P公司在两张表的交集为{p1},并集扣除交集为{p2,p3,p4},那么如果后者集合的工资均值为1万元,且p1在表1的工资为13000元,在表2的工资为9000元,那么应该最后取9000元作为p1的工资,最后对于没有信息的员工,利用缺失值填充。¶

import pandas as pd
import numpy as np

df1 = pd.read_csv('data/Employee1.csv')
df2 = pd.read_csv('data/Employee2.csv')

# 每个公司有多少员工满足如下条件:既出现第一张表,又出现在第二张表
L = list(set(df1['Name']).intersection(set(df2['Name'])))

# 将所有不符合(a)中条件的行筛选出来,合并为一张新表,列名与原表一致
df_b1 = df1[~df1['Name'].isin(L)]
df_b2 = df2[~df2['Name'].isin(L)]
df_b = pd.concat([df_b1,df_b2]).set_index('Name')

# 现在需要编制所有80位员工的信息表,对于(b)中的员工要求不变,对于满足(a)条件员工,它们在某个指标的数值,取偏离它所属公司中满足(b)员工的均值数较小的哪一个,例如:P公司在两张表的交集为{p1},并集扣除交集为{p2,p3,p4},那么如果后者集合的工资均值为1万元,且p1在表1的工资为13000元,在表2的工资为9000元,那么应该最后取9000元作为p1的工资,最后对于没有信息的员工,利用缺失值填充

df1 = pd.read_csv('data/Employee1.csv')
df2 = pd.read_csv('data/Employee2.csv')
df1['重复'] = ['Y_1' if df1.loc[i,'Name'] in L else 'N' for i 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值