使用pandas(Python)从字符串矩阵构造计数矩阵(整数)的方法
有人能帮我找到一个方法来解决下面的问题吗?我更喜欢寻找解决问题的术语,但是如果你知道一个快速而肮脏的方法,我也会很感激 我有一个如下所示的矩阵:使用pandas(Python)从字符串矩阵构造计数矩阵(整数)的方法,python,pandas,dataframe,matrix,Python,Pandas,Dataframe,Matrix,有人能帮我找到一个方法来解决下面的问题吗?我更喜欢寻找解决问题的术语,但是如果你知道一个快速而肮脏的方法,我也会很感激 我有一个如下所示的矩阵: sample_1. sample_2. sample_3. sample_4. G1 inc_1,inc_1A. *. inc_1. inc_1. G2 inc_2. *. *.
sample_1. sample_2. sample_3. sample_4.
G1 inc_1,inc_1A. *. inc_1. inc_1.
G2 inc_2. *. *. *.
G3 *. inc_3,inc_3A,inc_3B. inc_3. inc_3,inc_3A
我希望将其转换为如下所示的计数矩阵
sample_1. sample_2. sample_3. sample_4.
G1 2 0 1 1
G2 1 0 0 0
G3 0 3 1 2
这个数据库相当大(大约10000列和3000000行),所以我想尽量避免使用df.iterrows()。有人知道我如何开始实施这一点吗
单元格中的“u”可以计算为所有事件都有此术语,“*”表示未检测到(或0)
非常感谢您提供的任何帮助、建议或建设性的批评。您可以使用+统计数据帧列中每个字符串中出现的\uucode>:
df.apply(lambda s: s.str.count(pat='_'))
这可能是一种发布问题的方式,这样其他人就可以很容易地处理:
import pandas as pd
d = {'col1': ['inc_1,inc_2.', 'inc_2', '*.'], 'col2': ['inc_1.', '*.', 'inc_1,inc_3.']}
df = pd.DataFrame(data=d)
这里有一个解决方案。请注意,applymap是关键:
df_new = df.copy()
df_new = df_new.applymap(lambda x: x.count('_'))
print(df_new)
你试过regex()吗?我没有试过,但我现在要读一读。谢谢,我从来没有考虑过lambda函数或df.apply!非常感谢,我没有考虑df.apply、df.applymap或lambda函数。我自学python,所以我的知识差距很大。谢谢你的意见,没关系。所以这里有一些例子和案例要学习。
df_new = df.copy()
df_new = df_new.applymap(lambda x: x.count('_'))
print(df_new)