【问题标题】:Pandas: count number of times every value in one column appears in another column熊猫:计算一列中的每个值出现在另一列中的次数
【发布时间】:2020-10-09 20:23:40
【问题描述】:

我想计算子列中的值出现在父列中的次数,然后在重命名为子列的新列中显示此计数。请参阅下面的预览 df。

我通过 VBA (COUNTIFS) 完成了这项工作,但现在需要使用从目录提供的数据进行动态可视化和动画显示。所以我求助于 Python 和 Pandas,并在搜索和阅读以下答案后尝试了以下代码:Countif in pandas with multiple conditions | Determine if value is in pandas column | Iterate over rows in Pandas df |很多其他的... 但仍无法获得预期的预览,如下图所示。

任何帮助将不胜感激。提前致谢。

#import libraries
import pandas as pd
import numpy as np
import os

#get datasets
path_dataset = r'D:\Auto'
df_ns = pd.read_csv(os.path.join(path_dataset, 'Scripts', 'data.csv'), index_col = False, encoding = 'ISO-8859-1', engine = 'python')

#preview dataframe
df_ns

#tried
df_ns.groupby(['Child','Parent', 'Site Name']).size().reset_index(name='child count')

#preview output
df_ns.groupby(['Child','Parent', 'Site Name']).size().reset_index(name='child count')

预览数据框

预览输出

预期输出

[已编辑]我的数据

子 = ['Tkt01', 'Tkt02', 'Tkt03', 'Tkt04', 'Tkt05', 'Tkt06', 'Tkt07', 'Tkt08', 'Tkt09', 'Tkt10']

父 = [' ', ' ', 'Tkt03',' ',' ', 'Tkt03',' ', 'Tkt03',' ',' ', 'Tkt06',' ',' ',' ',]

Site_Name =[Yaounde','Douala','Bamenda','Bafoussam','Kumba','Garoua','Maroua','Ngaoundere','Buea','Ebolowa']

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我创建了一个与您的 df 相似的文件。

    之前

    试试这个代码

    df['Count'] = [len(df[df['parent'].str.contains(value)]) for index, value in enumerate(df['child'])]
    #breaking it down as a line by line code
    
    counts = []
    for index, value in enumerate(df['child']):
        found = df[df['parent'].str.contains(value)]
        counts.append(len(found))
    df['Count'] = counts
    

    之后

    希望这对你有用。

    【讨论】:

    • 谢谢@Isaac Frank ``` df_ns['child_count'] = [len(df_ns[df_ns['Parent'].str.contains(value)]) 用于索引,枚举值( df_ns['Child'])] ``` 工作得很好。你给我的周末增添了情趣! :)
    • 很高兴能帮上忙。快乐编码:D
    【解决方案2】:

    由于我无权访问您的数据,因此我无法检查我提供给您的代码。我建议您在使用此行时会遇到 nan 值的问题,但您可以尝试一下。:

    df_ns['child_count'] = df_ns['Parent'].groupby(df_ns['Child']).value_counts()
    

    我为新列命名,并通过 groupby -> value_counts 函数直接为其赋值。

    【讨论】:

    • 感谢您的回答。我已经添加了 data.csv 也尝试了你的提示
    猜你喜欢
    • 2018-07-17
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2021-08-03
    相关资源
    最近更新 更多