簡體   English   中英

循環分組數據框列以檢查字符串值

[英]Loop through grouped dataframe columns to check for string values

我有兩個數據框,一個包含從 PDF 文檔中抓取的大量文本數據,另一個包含類別和子類別。

對於每個子類別,我需要計算包含至少一個子類別提及的文檔的百分比(例如,對於子類別“apple”,計算包含“apple”的文檔的百分比)。 我能夠正確計算子類別百分比。 但是,當我嘗試使用該值填充數據框時,會顯示不正確的值。

對於每個類別,我需要計算包含至少一個提及每個子類別的文檔的百分比(例如,對於“水果”類別,計算包含“蘋果”或“香蕉”的文檔的百分比)。 這個值的計算比較困難,因為它不是小計。 我試圖通過 GROUPBY 和 APPLY 的組合來計算這個值,但我被卡住了。

文檔數據框如下所示: 在此處輸入圖像描述

類別數據框如下所示: 在此處輸入圖像描述

這就是我的目標: 在此處輸入圖像描述

這是我到目前為止所擁有的:

import pandas as pd
documents = {'Text': ['apple apple', 'banana apple', 'carrot carrot carrot', 'spinach','hammer']}
doc_df = pd.DataFrame(data=documents)
print(doc_df,'\n')

categories = {'Category': ['fruit', 'fruit', 'vegetable', 'vegetable'],
        'Subcategory': ['apple', 'banana', 'carrot', 'spinach']}
cat_df = pd.DataFrame(data=categories)
print(cat_df,'\n')

total_docs = doc_df.shape[0]
cat_df['Subcat_Percentage'] = 0
cat_df['Cat_Percentage'] = 0
cat_df = cat_df[['Category', 'Cat_Percentage', 'Subcategory', 'Subcat_Percentage']]

for idx, subcategory in enumerate(cat_df['Subcategory']):
    total_docs_with_subcat = doc_df[doc_df['Text'].str.contains(subcategory)].shape[0]
    subcat_percentage = total_docs_with_subcat / total_docs #calculation is correct
    cat_df.at[idx, 'Subcat_Percentage'] = subcat_percentage #wrong value is output
    cat_percentage = cat_df.groupby('Category').apply(lambda x: (doc_df[doc_df['Text'].str.contains(subcategory)].shape[0]) #this doesn't work
    cat_df.at[idx, 'Cat_Percentage'] = cat_percentage

print('\n', cat_df,'\n')

它可以更好地優化,但試試這個:

agg_category = cat_df.groupby('Category')['Subcategory'].agg('|'.join)

def percentage_cat(category):
    return doc_df[doc_df['Text'].str.contains(agg_category[category])].size / doc_df.size

def percentage_subcat(subcategory):
    return doc_df[doc_df['Text'].str.contains(subcategory)].size / doc_df.size

cat_df['percentage_category'] = cat_df['Category'].apply(percentage_cat)
cat_df['sub_percentage'] = cat_df['Subcategory'].apply(percentage_subcat)

cat_df

暫無
暫無

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

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