【问题标题】:Method to construct an count matrix (in integers) from a matrix of strings with pandas (Python)使用熊猫(Python)从字符串矩阵构造计数矩阵(整数)的方法
【发布时间】:2021-01-31 11:43:06
【问题描述】:

有人可以帮我找到解决以下问题的方法吗?我更喜欢寻找要搜索的术语来解决问题,但如果您知道一种快速而肮脏的方法,那也将不胜感激。

我有一个像下面这样的矩阵:

        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

这个数据库非常大(大约 10,000 列和 3,000,000 行),所以我想尽可能避免使用 df.iterrows()。有谁知道我如何开始实施这个?

单元格中的“_”可以算作所有事件都具有此命名法,“*”表示未检测到(或 0)。

我们非常感谢任何帮助、建议或建设性的批评。

【问题讨论】:

标签: python pandas dataframe matrix


【解决方案1】:

您可以使用 DataFrame.apply + Series.str.count 来统计数据框列中每个字符串中_ 的出现次数:

df.apply(lambda s: s.str.count(pat='_'))

    sample_1.  sample_2.  sample_3.  sample_4.
G1          2          0          1          1
G2          1          0          0          0
G3          0          3          1          2

【讨论】:

  • 我什至从未考虑过 lambda 函数或 df.apply!非常感谢
【解决方案2】:

这可能是一种发布问题的方式,这样其他人就可以很容易地解决问题:

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)

【讨论】:

  • 我没有考虑过 df.apply、df.applymap 或 lambda 函数。我是用python自学的,所以我有很大的知识空白。感谢您的意见。
  • 没关系。所以这里有例子和案例要学习。
猜你喜欢
  • 2016-08-28
  • 2021-12-29
  • 1970-01-01
  • 2017-04-11
  • 2017-04-13
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多