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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013421629/article/details/82851678

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、数据框按指定的顺序输出数据集

扫描二维码关注公众号,回复: 3524771 查看本文章
 # 按指定列顺序输出
  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


猜你喜欢

转载自blog.csdn.net/u013421629/article/details/82851678