Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个python函数,在一列中查找一系列癌症代码值,并按癌症代码返回前10位死亡人数_Python_Pandas_Function - Fatal编程技术网

创建一个python函数,在一列中查找一系列癌症代码值,并按癌症代码返回前10位死亡人数

创建一个python函数,在一列中查找一系列癌症代码值,并按癌症代码返回前10位死亡人数,python,pandas,function,Python,Pandas,Function,我被困在一个问题上,我有一个包含各种死因的大型数据集。我想按死亡原因筛选某些代码(总共100多个)和字符编号(例如F58),这样我就可以得到该疾病的死亡总数,并按前10位合并死亡总数对其进行排序 我已经发布了一个来自Excel的csv文件数据示例。你能帮我指出解决这个问题的正确方向吗 第一步是创建一个您正在查找的代码列表,然后使用掩码筛选数据帧 code_list = ['F58'] # add as many as you want # Filter original dataframe

我被困在一个问题上,我有一个包含各种死因的大型数据集。我想按死亡原因筛选某些代码(总共100多个)和字符编号(例如F58),这样我就可以得到该疾病的死亡总数,并按前10位合并死亡总数对其进行排序

我已经发布了一个来自Excel的csv文件数据示例。你能帮我指出解决这个问题的正确方向吗


第一步是创建一个您正在查找的代码列表,然后使用掩码筛选数据帧

code_list = ['F58']  # add as many as you want

# Filter original dataframe on the codes
new_df = old_df[old_df['Code'].isin(code_list)]
然后,听起来你想做的是将数据按死因分组,并将该死因的总死亡人数相加:

# This groups codes and counts how many occurrences fall into that group
top_ten = new_df.groupby(by='Code').count()  
然后,您可以使用sortby()将数据帧从高到低排列,并对数据帧进行切片以保留前十位

希望这有帮助

更新: 在我的机器上尝试了一个玩具样品,结果如下:
这里有两个例子可以帮助您:

import pandas as pd

# I will create a data frame from a dictionary for this example
dict_df = {
    "Code": ["A","B","C","D","C","B","B","B","A","A"],
    "Age":  [14, 16, 17, 4, 15, 16, 8, 10, 90, 99],
    "Sex":  [0, 1, 1, 1, 0, 0, 0, 0, 0, 1]
}

data = pd.DataFrame.from_dict(dict_df)

# Group by column code
data_bycode = data.groupby(["Code"]).size()

# Sort data_bycode in decreasing order
data_bycode.sort_values(ascending = False, inplace = True) 
data_bycode
另一种方法是提取感兴趣的列,并使用
集合中的
计数器

from collections import Counter

# Collect data into a list
codes = data["Code"].tolist()

# Get ferquencies with Counter and transform it as a dict
freq_codes = dict(Counter(codes))

# Get a dictionary to create a data frame with columns Code and Count
dict_df = {"Code": [], "Count": []}
for key, value in freq_codes.items():
    dict_df["Code"].append(key)
    dict_df["Count"].append(value)

# Create df from dictionary 
df =  pd.DataFrame.from_dict(dict_df)
# Sort values in df
df.sort_values(ascending = False, inplace = True, by = "Count") # Neeeded here because we have more than one column
df
我希望它能有用:)


我基本上只需要原因列和死亡列作为输出,死亡1按最高顺序排列。(例如,用列中的数字排名1,2,3,4,5)谢谢

这将按代码和性别添加死亡人数,并在每个类别中创建一个计数。然后按代码和性别分组,按死亡人数降序排列

deaths = df.groupby(['code', 'sex']).size().reset_index(drop=False)
deaths.columns = ['code', 'sex', 'deaths'] 

deaths = deaths.groupby(['code', 'sex']).sum()
deaths.sort_values(by='deaths', ascending=False)

感谢您的回复,它没有给出我想要的确切输出。您是否知道如何将性别汇总在一起,因为每个死亡原因的性别分别为0和1,需要将其相加,以获得csv文件中一列中每个代码的总死亡率。谢谢,您可以为每个列定义一个自定义函数。您将放置“.agg()”,而不是“.count()”。在里面你可以放一个字典,其中键是列标签,值是你想要的字符串函数。所以在本例中,它可能看起来像.agg({'sex':'sum','agerange':'count'})。希望这能解决它!谢谢,我们只输出了10个代码,相关的死亡率数字仍然没有显示出来。我已经创建了一个新的数据框架,它只过滤我想要的代码(例如J和K1,K2,K3),只需要它从一列死亡率中排名前10位的最高死亡率,有没有关于如何翻转代码的想法?感谢您发布您所获得的内容的屏幕截图?您可以执行
output\u df=full\u df[['cause','deaths1']]
然后执行:
output\u df.sort\u value(by='deaths1',升序=False,inplace=True)
这将过滤掉您想要的两列并按死亡排序。然后,您应该调用
output\u df.reset\u index(drop=True)
以使索引按递增顺序排列。感谢它几乎完美,所以唯一的问题是它没有考虑其他性别,并且每个死亡代码只按一个性别排列。我如何才能将排名最高的代码与其对应的性别联系起来,并将其相加为最高死亡率?我很清楚,您的目标是将所有代码组合在一起,然后在每个代码中能够看到按性别划分的细分?编辑和澄清不应作为答案发布。相反,您的问题应该包括这些额外的澄清。如果您发布一个工作示例,其中您从熊猫数据框架中的
csv
加载数据,那将非常好。或者用一些虚拟数据创建一个数据帧。这将帮助我们更快地回复您。