建设银行官网招聘网站,短视频营销优势,网站开发与管理的专业描述,免费建设互动的网站需求#xff1a;
将 c1 按逗号拆分#xff0c;爆炸为一行一行数据#xff0c;然后将 c1 后边的有逗号的扩展成行#xff0c;没逗号的只写在第一行。
思路#xff1a; 先将 DataFrame 中有逗号的值分拆转为列表#xff0c;接下来我们对 c1 进行爆炸#xff0c;就得到了…需求
将 c1 按逗号拆分爆炸为一行一行数据然后将 c1 后边的有逗号的扩展成行没逗号的只写在第一行。
思路 先将 DataFrame 中有逗号的值分拆转为列表接下来我们对 c1 进行爆炸就得到了整个数据的基本框架在这个框架上我们修改调整数据。 将 a、b 两列设置为索引这样我们就只处需要处理的逻辑当然 c1 也不需要再处理了也可以设置为索引在最后需要处理完成了再重置回来。 写一个数据处理函数用索引分组后的 transform() 来应用因为 transform() 返回的是对每个列的处理返回的相同形状的数据。 关键是这个函数的逻辑对 c1 不处理直接返回如果这个无 Series 的第一个值是列表我们就要修改数据按以下几步 计算我们要多少个空格将第一个值列表与计算后的空格拼接形成一个与原列相同长度的列表将这个列表返回这样会覆盖到原列数据如果不是列表只将第一个值与其他空格组成列表返回逻辑和上述过程一样
二、使用步骤
1.引入库
代码如下示例
import pandas as pd
import io2.读入数据
代码如下示例
data
a b c1 c2 c3 c4
A W 1,2,3 1,2 1,3,3 g
B X 1,2,3,4,5 k 1,4,7 h
df pd.read_csv(io.StringIO(data),sep\s)
df# 先将有逗号的值拆分成列表
df.map(lambda x: x.split(,) if , in x else x)# 爆炸 c1 列设置索引
(df.map(lambda x: x.split(,) if , in x else x).explode(c1).set_index([a, b])
)# 分组按思路逻辑编写处理函数
def func(s: pd.Series):first s.iloc[0]if s.name c1:return selif isinstance(first, list):space_len len(s) - len(first)values first []*space_lenreturn valueselse:values [first] []*(len(s)-1)return values(df.map(lambda x: x.split(,) if , in x else x).explode(c1).set_index([a, b]).groupby(level[0, 1]).transform(func).reset_index()
)总结
以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。