python - 如何提取数据框中出现的字符串?
问题描述
您好,有问题请帮忙:
我有一个这样的数据框:
data = {'col_1': [13,22,45], 'col_2': ['max jo;max3;max;maxT za;max jo;',
'max jo;maxF zero;max jo;maxD ;maxT;max jo;',
'wmaxT za;maxF;maxbing;maxT ze;max xw;',]}
df1 = pd.DataFrame.from_dict(data)
+----+-------------------------------------------+
|col1| col2 |
+----+------+-------+----------------------------+
| 13 | max jo;max3;max;maxT za;max jo' |
| 22 | max jo;maxF zero;max jo;maxD ;maxT;max jo |
| 45 | wmaxT za;maxF;maxbing;maxT za;max xw |
+---+------+-------+-----------------------------+
我首先用“col2”提取一个集合
我被阻止了,因为我在 col_1 上找不到事件??
col = df1["col_2"].str.findall("\w+")
unique = set()
for x in col:
unique.update(x)
我想提取 col2 中每次出现的所有代码“col1”
像这样的数据框:
+-----------+-------------------------------+
|col1 | col2 |
+----+------+-------+-----------------------+
| max jo | 13,22 |
| max3 | 3 |
| maxT za | 13,45 |
| ... ... |
+---+------+-------+------------------------+
解决方案
我认为您需要拆分;
以避免使用空格拆分值,将其整形stack
并聚合set
s 转换为字符串:
col = (df1.set_index('col_1')["col_2"]
.str.strip(";'")
.str.split(";", expand=True)
.stack()
.str.strip()
.reset_index(name='new1')
.groupby('new1')['col_1']
.agg(lambda x: ','.join(set(x.astype(str))))
.reset_index(name='new2'))
print (col)
new1 new2
1 max 13
2 max jo 13,22
3 max xw 45
4 max3 13
5 maxD 22
6 maxF 45
7 maxF zero 22
8 maxT 22
9 maxT za 13
10 maxT ze 45
11 maxbing 45
12 wmaxT za 45
您可以使用自定义功能,例如:
def extract(df, col1,col2):
new = (df.set_index(col1)[col2]
.str.strip(";'")
.str.split(";", expand=True)
.stack()
.str.strip()
.reset_index(name='new1')
.groupby('new1')[col1]
.agg(lambda x: ','.join(set(x.astype(str))))
.reset_index(name='new2'))
return new
df1 = extract(df1, 'col_1','col_2')
推荐阅读
- java - 方法 com/mysql/jdbc/PreparedStatement.isClosed()Z 是抽象的
- r - 为什么长格式数据结构在 R 中占用更多内存?
- windows - 如何让 Perl 6 在 Windows 上运行?
- python - 使用列表推导打印转换后的字符串?
- java - 是否可以直接从 Array 或任何 java 实现中更改局部变量值?
- python-3.x - 如何将变量中获取的值传递给另一个变量
- python - VPython 上的数组中的延迟信息
- android - 嵌套数据firebase的嵌套类
- python - 如果在任何其他点的某个阈值内,则从列表中删除点
- excel - 使用 VBA 编辑注释和保留格式