【python 数据框操作】DataFrame数据框的合并和重整

1、数据框去除重复

data1 = data1.drop_duplicates()

2、数据框拼接(ignore_index=True,重新分配索引)

# 两种方式,concat、append皆可以
result3=pd.concat([result1,result2],ignore_index=True)
result3=result1.append(result2,ignore_index=True)


# 用法
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
          keys=None, levels=None, names=None, verify_integrity=False,
          copy=True)

axis:要粘在哪个轴上。默认0,粘贴行。
join:默认outer,合集;inner,交集。
ignore_index:布尔型,默认False。如果为Ture的话,会重新分配index从0...n-1。
keys:一个序列,默认None。建立等级索引,作为最外层的level。
levels:序列sequences构成的list,默认None。

3、数据框分组排序取每组内的前两个

data4.sort_values(['cert_no', 'value'], ascending=[1, 0], inplace=True)
grouped = data4.groupby(['cert_no']).head(2)

4、数据框分组计数,分组求和(以无索引的方式返回聚合数据)

 data2 = data1.groupby(['cert_no', 'mix_types'], as_index=False).count()
 data3 = data2.groupby(['cert_no'], as_index=False)['value'].sum()

5、数据框重命名

 data2.columns = ['cert_no', 'mix_types', 'value']

6、数据框合并

data4 = pd.merge(data2, data3, on='cert_no', how='left')

# 用法
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False)
         
left: 一个dataframe对象
right: 另一个dataframe对象
how: 可以是'left', 'right', 'outer', 'inner'. 默认为inner。
on: 列名,两个dataframe都有的列。如果不传参数,
    而且left_index和right_index也等于False,
    则默认把两者交叉/共有的列作为链接键(join keys)。
    可以是一个列名,也可以是包含多个列名的list。
left_on: 左边dataframe的列会用做keys。可以是列名,
    或者与dataframe长度相同的矩阵array。
right_on: 右边同上。
left_index: 如果为Ture,用左侧dataframe的index作为
    连接键。如果是多维索引,level数要跟右边相同才行。
right_index: 右边同上。
sort: 对合并后的数据框排序,以连接键。
suffixes: 一个tuple,包字符串后缀,用来加在重叠的列名后面。
    默认是('_x','_y')。
copy: 默认Ture,复制数据。
indicator: 布尔型(True/FALSE),或是字符串。
    如果为True,合并之后会增加一列叫做'_merge'。
    是分类数据,用left_only, right_only, both来标记
    来自左边,右边和两边的数据。

7、数据框选择指定的列

data1 = data.loc[:, ['order_no', 'mix_types', 'cert_no']]

8、数据框刷选 符合某一列内容包含部分的数据集isin

# game_no_repeated 是一个列表
k2 = k1[k1['game_no'].isin(game_no_repeated)]

9、数据框删除某一列

 data3 = data3.drop('cell',axis=1)

10、数据框根据某一列的值去判断增加某一列

 data['jc_plate_2'] = list(map(lambda x: "正" if x > 0 else "负" if x < 0 else "零", data['jc_plate']))

11、数据框按指定的顺序输出数据集

 # 按指定列顺序输出
  cols = ['app_id', 'user_id', 'login_name', 'cert_no', 'type', 'lable', 'value', 'record_date']
  df = data7.ix[:, cols]

12、数据框输出txt

 # 输出txt
 df.to_csv('/home/admin/user_lable_dimension/brush/result/qb-%s.txt' % partition_date, index=False, sep='\t',header=None)

13、数据透视表

DataFrame.pivot(index=None, columns=None, values=None)[source]

index:字符串或对象,可选。列名,用来当新数据框index的列,可以是多个列名的list。
columns:字符串或对象。列名,当做新数据框的列。
values:字符串或对象,可选。列名,生成新数据框的值。
    如果没有指定,则使用余下的所有列,会生成等级索引列。


import  pandas as pd

df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],'bar': ['A', 'B', 'C', 'A', 'B', 'C'],'baz': [1, 2, 3, 4, 5, 6]})

print(df)


df2=df.pivot(index='foo', columns='bar', values='baz')
print(df2)


  bar  baz  foo
0   A    1  one
1   B    2  one
2   C    3  one
3   A    4  two
4   B    5  two
5   C    6  two
bar  A  B  C
foo         
one  1  2  3
two  4  5  6

Process finished with exit code 0



14、针对某一列替换

fun=lambda x: x.split('_')[1]
dataframe['number']=dataframe['name'].apply(fun)

15、数据框索引转换为列

k1=pd.DataFrame(pd.value_counts(se1))
k1.reset_index(level=0, inplace=True)

16、字符串包含筛选

# 筛选含有M,Ksize 的列
data=data.loc[data['Size'].str.contains('M|k')]

# 针对某一列替换

def fun1(x):
    if 'M' in x:
        return x.split('M')[0]
    else:
        return float(x.split('k')[0])/1024


data['Size1']=list(map(fun1,list(data['Size'])))


17、数据框两列计算相似度
# 数据框两列计算相似度
phash_dataframe['similary']= phash_dataframe.apply(lambda row: phash_img_similarity(int(row['phash_list']), int(row['calc_phash'])), axis=1)
print(phash_dataframe)


18、数据框两列调用一个函数做计算赋值给新的变量

def samfile_count(x,y):
    sam_count=samfile.count(contig='Chr1', start=x, stop=y)
    return sam_count 

columndf_exon['count']=columndf_exon.apply(lambda r: samfile_count(r['start'],r['end']),axis=1)
print(columndf_exon.head())
cols=['gene_name','count']
res_output=columndf_exon.loc[:,cols]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东华果汁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值