python - 基于Dataframe中逗号分隔列中的文本分组
问题描述
我有一个包含逗号分隔列的数据表。我想根据逗号分隔列中的每个值按数据分组。
Date Investment Type Medium
1/1/2000 Mutual Fund, Stocks, Fixed Deposit, Real Estate Own, Online,Through Agent
1/2/2000 Mutual Fund, Stocks, Real Estate Own
1/3/2000 Fixed Deposit Online
1/3/2000 Mutual Fund, Fixed Deposit, Real Estate Through Agent
1/2/2000 Stocks Own, Online, Through Agent
我必须按中等和投资类型分组,如下所示。媒介作为我正在编写的软件的输入。
中等投资类型日期
Online Stocks 1/2/2000,1/1/2000
Own Mutual Fund 1/1/2000,1/3/2000
我已经使用收到的输入进行了搜索,并且确实得到了结果。但我无法进入我想要的聚合格式。我是 Python 和 Pandas 的新手。感谢你的帮助。谢谢
解决方案
首先使用和正则表达式单词边界Medium
逐列提取值:Series.str.findall
L = ['Online','Own']
pat = '|'.join(r"\b{}\b".format(x) for x in L)
df['New_Medium'] = df.pop('Medium').str.findall('('+ pat + ')').str.join(', ')
#remove rows with empty values
df = df[df['New_Medium'].astype(bool)]
print (df)
Date Investment Type New_Medium
0 1/1/2000 Mutual Fund, Stocks, Fixed Deposit, Real Estate Own, Online
1 1/2/2000 Mutual Fund, Stocks, Real Estate Own
2 1/3/2000 Fixed Deposit Online
4 1/2/2000 Stocks Own, Online
最后获取所有组合product
和最后一个聚合join
:
from itertools import product
df1 = pd.DataFrame([j for i in df.apply(lambda x: x.str.split(',\s*')).values
for j in product(*i)], columns=df.columns)
df = df1.groupby(['Investment Type','New_Medium'])['Date'].agg(', '.join).reset_index()
print (df)
Investment Type New_Medium Date
0 Fixed Deposit Online 1/1/2000, 1/3/2000
1 Fixed Deposit Own 1/1/2000
2 Mutual Fund Online 1/1/2000
3 Mutual Fund Own 1/1/2000, 1/2/2000
4 Real Estate Online 1/1/2000
5 Real Estate Own 1/1/2000, 1/2/2000
6 Stocks Online 1/1/2000, 1/2/2000
7 Stocks Own 1/1/2000, 1/2/2000, 1/2/2000
推荐阅读
- c - C 中的 malloc() 何时返回 NULL?
- javascript - 使用 Emoji Regex Respecting Variation Selector 15 拆分字符串
- vim - vim中状态栏(尾随、混合缩进、混合缩进文件)的含义
- ruby-on-rails - ActiveRecord 执行单个 SQL 语句以销毁基于包含的依赖模型
- python - 如何使用 OpenCV 使这些非常粗糙的图像平滑和变薄?
- wordpress - 导入自定义字段文件时获取空文件
- python-3.x - 展开列元素
- python - Dialogflow - 通过 v2 API 创建带有输入上下文的 Intent
- javascript - Vue - 在 v-for 图像数组中切换一个图像
- swift - Swift - 如何在菜单栏应用程序的窗口中共享一个类(作为单例)?