036—pandas 按行将列名根据值由大到小排序

前言

数据处理中,按行排列的列名可以提供更直观的数据探索和分析方式。

你可以逐行查看列名,了解每列的含义和特征,有助于更好地理解数据集的结构和内容。

需求:

  • 需要增加一列「分布方式」,每行的值是本行基金名称对应列名及数量,顺序按照值大小,值为 0 的不显示

思路:

  • 先用 apply() 按行,将构成每行 Series 转为字典,这时字典的键为列名,值为数值。
  • 接着用列表推导式过滤值为 0 的项,得到一个列表。
  • 再用 join() 方法用顿号 、 将列表的所有项连接起来。
  • 最后将得到的结果指定为一个列。

使用步骤

读入数据

代码如下(示例):

python 复制代码
mport io
import pandas as pd


data = '''
基金名称 电子 传媒 计算机
 基金A  1  6   7
 基金B  0  3   8
 基金C  7  0   9

'''

df = pd.read_csv(io.StringIO(data), delim_whitespace=True) #通过指定delim_whitespace=True参数来指示使用空格作为分隔符
df
python 复制代码
# 代码:
# 先设置基金名称为索引,这时基金名称就不参加行的计算,仅值进行计算。
# 用 apply() 按行将每行 Series 进行排序,最后转为字典:
(
    df.set_index('基金名称')
    .apply(lambda x: x.sort_values(ascending=False).to_dict(), axis=1) #对每个基金的投资分布按照降序排序,并转换成字典的形式
)
python 复制代码
# 通过列表推导式,将值为 0 的过滤,得到列表:
(
    df.set_index('基金名称')
    .apply(lambda x: x.sort_values(ascending=False).to_dict(), axis=1)
    .map(lambda x: [f'{k}({v})' for k,v in x.items() if v>0])
)
python 复制代码
# 用中文顿号连接列表的项:
# 使用map()函数将每个Series对象中的字符串用'、'连接起来,形成一个新的字符串
col = (
    df.set_index('基金名称')
    .apply(lambda x: x.sort_values(ascending=False).to_dict(), axis=1)
    .map(lambda x: [f'{k}({v})' for k,v in x.items() if v>0])
    .map('、'.join)
)
col
python 复制代码
# 将得到的列值指定到数据中:
df.assign(行业分布=col.array) # col.array表示将列数据以数组的形式添加到DataFrame对象中

总结

以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
凌波粒17 小时前
D2L学习笔记:安装、张量与数据处理
笔记·python·学习·pandas
沪漂阿龙2 天前
深入浅出 Pandas apply():从入门到向量化思维
人工智能·python·pandas
沪漂阿龙2 天前
深度解析Pandas数据组合:从concat到merge,打通你的数据处理任督二脉
python·数据分析·pandas
哈伦20192 天前
Python 生成随机数
python·机器学习·pandas
大数据魔法师3 天前
云南省天气数据可视化分析大屏的设计与实现(二)- 云南省各城市天气数据预处理
python·mysql·pandas
Hello.Reader3 天前
Apache Arrow 在 PySpark 中的使用提速 Pandas 转换与 UDF 的关键武器
apache·pandas
Hello.Reader3 天前
Pandas API on Spark 配置选项系统、默认索引与性能调优
大数据·spark·pandas
Python大数据分析@4 天前
Pandas相比Excel的优势是哪些?
excel·pandas
Hello.Reader5 天前
Pandas API on Spark 快速入门像写 Pandas 一样使用 Spark
大数据·spark·pandas
白日与明月8 天前
Pandas 读取文本数据 (Text I/O) 速查表
爬虫·python·pandas