簡體   English   中英

使用 pandas (Python) 從字符串矩陣構造計數矩陣(整數)的方法

[英]Method to construct an count matrix (in integers) from a matrix of strings with pandas (Python)

有人可以幫我找到解決下面查詢的方法嗎? 我更喜歡尋找要搜索的術語來解決問題,但是如果您知道一種快速而骯臟的方法,那也將不勝感激。

我有一個像下面這樣的矩陣:

        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)。

非常感謝任何幫助、建議或建設性的批評。

您可以使用DataFrame.apply + Series.str.count來計算 dataframe 列中每個字符串中_的出現次數:

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

這可能是發布問題的一種方式,因此其他人可以很容易地處理:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM