Python-科学计算-pandas-20-部分列获取及部分行合并

系统:Windows 10
编辑器:JetBrains PyCharm Community Edition 2018.2.2 x64
pandas:1.1.5

  • 这个系列讲讲Python的科学计算及可视化
  • 今天讲讲pandas模块
  • 按照时间列,得出每行属于上中下旬,进而对df进行分组

Part 1:场景描述

  1. 已知df1,包括6列,"quality_1", "measure_value", "up_tol", "down_tol", "group", "label"
  2. 只需要其中的'quality_1', 'group', 'label',合计3列参与后续演示,记为df2
  3. 按照group组进行分组,label去重,以,链接,记为df3

df1
在这里插入图片描述
df2
在这里插入图片描述
df3
在这里插入图片描述

Part 2:代码

import pandas as pd


# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)
# 设置显示长度为100
pd.set_option('max_colwidth', 100)
# 设置对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 设置打印宽度
pd.set_option('display.width', 180)

dict_1 = {"quality_1": ["pos_1", "pos_1", "pos_2", "pos_2", "pos_3"],
          "measure_value": [6, 4, 6, 3.5, 2.5],
          "up_tol": [5, 5, 3, 3, 2],
          "down_tol": [-5, -5, -3, -3, 2],
          "group": ["A", "A", "B", "B", "C"],
          "label": ["小雨", "小雨", "中雨", "小雪", "中雪"]}

# 生成df
df1 = pd.DataFrame(dict_1, columns=["quality_1", "measure_value", "up_tol", "down_tol", "group", "label"])
print('\ndf1')
print(df1)

# 只保留部分列
list_output_fields = ['quality_1', 'group', 'label']
df2 = df1[list_output_fields]
print('\ndf2')
print(df2)


def concat_func1(x):
    print("\nx")
    print(x)
    y = pd.Series({
        'label': ','.join(x['label'].unique())
    }
    )
    print("\ny")
    print(y)
    print(type(y))
    return y


def concat_func2(x):
    y = pd.Series({
        'label': ','.join(x['label'].unique()),
        'quality_1': '+'.join(x['quality_1']),
    }
    )
    return y


# 组合
df3 = df2.groupby(df2['group']).apply(
    concat_func1).reset_index()
print('\ndf3')
print(df3)

print('\n')
print('分步骤展示')
df31 = df2.groupby(df2['group'])
list31 = list(df31)
print('\ndf31')
print(df31)
print('\nlist31')
print(list31)


df32 = df31.apply(concat_func2)
print('\ndf32')
print(df32)


df33 = df32.reset_index()
print('\ndf33')
print(df33)

代码截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Part 3:输出结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Part 4:部分代码解读

  1. df获取部分列数据,使用df[字段列表],注意list_output_fields是一个列表
    • list_output_fields = ['quality_1', 'group', 'label']
    • df2 = df1[list_output_fields]
  2. df3 = df2.groupby(df2['group']).apply(concat_func1).reset_index(),以group列对df2进行分组,本示例中生成3个df,然后分别应用apply里面的函数
  3. pd.Series({'label': ','.join(x['label'].unique())},对其中的label列进行去重,然后用,连接起来。pd.Series(参数),若需要对多列进行处理,其中的参数是个字典,键是列名,值是处理方法,增加键值对即可
    4.df32.reset_index(),索引进行重置,原索引变成一个列,如下图所示

Ps:apply函数这块之前也写过文章,但总觉得还没有理解透,后续可能还会写一些应用文章

reset_index
在这里插入图片描述

本文为原创作品,欢迎分享朋友圈

长按图片识别二维码,关注本公众号
Python 优雅 帅气
12x0.8.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值