鱼C论坛

 找回密码
 立即注册
查看: 1839|回复: 6

[已解决]想把数据帧某列内容简化,请大师帮忙,谢谢

[复制链接]
发表于 2023-5-6 21:01:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想把下面的数据帧简化成最下面的内容,请大师帮忙,谢谢

import pandas as pd

data = [['1:300395/菲利华/8.03%/536.81/23,565.83。;2:300593/新雷能/7.01%/653.62/20,562.93。;3:002025/航天电器/6.27%/320.10/18,402.70。'],
        ['5:603259/药明康德/3.91%/144.50/11,487.69。;7:688281/华秦科技/3.35%/38.35/9,835.65。;8:603712/七一二/2.81%/267.06/8,257.51。']]

columns = ["编号"]
df = pd.DataFrame(data, columns=columns)



data = [[菲利华/8.03;新雷能/7.01;航天电器/6.27’],
[‘药明康德/3.91;华秦科技/3.35;七一二/2.81’]]
最佳答案
2023-5-6 21:03:10
你好,你可以使用以下代码来简化数据帧:
import pandas as pd

data = [['1:300395/菲利华/8.03%/536.81/23,565.83。;2:300593/新雷能/7.01%/653.62/20,562.93。;3:002025/航天电器/6.27%/320.10/18,402.70。'],
        ['5:603259/药明康德/3.91%/144.50/11,487.69。;7:688281/华秦科技/3.35%/38.35/9,835.65。;8:603712/七一二/2.81%/267.06/8,257.51。']]

columns = ["编号"]
df = pd.DataFrame(data, columns=columns)

df['编号'] = df['编号'].str.split(';')
df['编号'] = df['编号'].apply(lambda x: [i.split('/')[1] + '/' + i.split('/')[2].replace('%', '') for i in x])
这将会把数据帧简化成以下内容:
data = [['菲利华/8.03', '新雷能/7.01', '航天电器/6.27'],
        ['药明康德/3.91', '华秦科技/3.35', '七一二/2.81']]
希望这可以帮到你!如果你还有其他问题,请随时问我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-6 21:02:48 | 显示全部楼层
以下是可以实现该功能的代码:

python
import re
import pandas as pd

data = [['1:300395/菲利华/8.03%/536.81/23,565.83。;2:300593/新雷能/7.01%/653.62/20,562.93。;3:002025/航天电器/6.27%/320.10/18,402.70。'],
        ['5:603259/药明康德/3.91%/144.50/11,487.69。;7:688281/华秦科技/3.35%/38.35/9,835.65。;8:603712/七一二/2.81%/267.06/8,257.51。']]

columns = ["编号"]
df = pd.DataFrame(data, columns=columns)

# 获取每个编号下的股票名字和占比信息
stocks = df["编号"].str.findall(r'/(\S+)/(\d+\.\d+)%')

# 将结果转成字符串格式,多个项之间用分号隔开
result = stocks.apply(lambda x : ';'.join(['{} / {}'.format(*y) for y in x]))

# 将数据加入到一个新的DataFrame中
df_result = pd.DataFrame(result, columns=["股票"])

print(df_result)
以上代码的原理是使用正则表达式查找每个编号下的股票名称和占比信息(其中 \S+ 匹配除空白字符以外的所有字符,\d+\.\d+ 匹配数字和小数点),然后对这些数据进行整理和格式化,最后将它们加入到一个新的DataFrame中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 21:03:10 | 显示全部楼层    本楼为最佳答案   
你好,你可以使用以下代码来简化数据帧:
import pandas as pd

data = [['1:300395/菲利华/8.03%/536.81/23,565.83。;2:300593/新雷能/7.01%/653.62/20,562.93。;3:002025/航天电器/6.27%/320.10/18,402.70。'],
        ['5:603259/药明康德/3.91%/144.50/11,487.69。;7:688281/华秦科技/3.35%/38.35/9,835.65。;8:603712/七一二/2.81%/267.06/8,257.51。']]

columns = ["编号"]
df = pd.DataFrame(data, columns=columns)

df['编号'] = df['编号'].str.split(';')
df['编号'] = df['编号'].apply(lambda x: [i.split('/')[1] + '/' + i.split('/')[2].replace('%', '') for i in x])
这将会把数据帧简化成以下内容:
data = [['菲利华/8.03', '新雷能/7.01', '航天电器/6.27'],
        ['药明康德/3.91', '华秦科技/3.35', '七一二/2.81']]
希望这可以帮到你!如果你还有其他问题,请随时问我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 21:05:10 | 显示全部楼层
为什么为什么为什么为什么为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 21:05:32 | 显示全部楼层
歌者文明清理员 发表于 2023-5-6 21:05
为什么为什么为什么为什么为什么

我也想问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 21:06:31 | 显示全部楼层
歌者文明清理员 发表于 2023-5-6 21:05
为什么为什么为什么为什么为什么

你一开始只回复了
a
抢第一没意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-6 21:06:58 | 显示全部楼层
陶远航 发表于 2023-5-6 21:06
你一开始只回复了

抢第一没意思

az
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 09:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表