[英]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.