pandas 如何将“事件”数据转换为国家年度数据,方法是将信息汇总到列中?

puruo6ea  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(92)

我正在尝试转换一个 Dataframe ,其中每行是一个特定的事件,每列都有关于该事件的信息。我希望将其转换为数据,其中每行是一个国家和年份,并包含关于给定年份中事件的数量和特征的信息。在此数据集中,每个事件都是恐怖主义的发生,我希望对nkill、nmattake、和每年受伤。这个数据集有西非的16个国家,着眼于2000 - 2020年,总共记录了大约8000起事件。数据来自全球恐怖主义数据库,这是一个论文/独立研究项目(即不是分级课堂作业)。
现在我的数据看起来像这样(还有很多其他列,但它们对这个不重要):
| 事件ID|伊耶尔|国家_文本|恩基尔|恩温德|人质|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 10000102|二○ ○ ○年|尼日利亚|三个|十个|无|
| 10000103|二○ ○ ○年|马里|1个|三个|十五|
| 10000103|二○ ○ ○年|尼日利亚|十五|无|无|
| 10000103|二○ ○一年|贝宁|1个|无|无|
| 10000103|二○ ○一年|尼日利亚|1个|三个|十五|

我希望它看起来像这样:
| 国家_文本|伊耶尔|总杀伤力|总受伤人数|人质总数|
| - ------|- ------|- ------|- ------|- ------|
| 尼日利亚|二○ ○ ○年|二百|三百|三百|
| 尼日利亚|二○ ○一年|二百五十|四百五十|十五|
基本上,我想把每个国家-年份组的nkill、ninjury和nmackage的数量加起来,这样我就可以得到一个所有国家和年份的列表,其中包含关于每年死亡、受伤和被劫持人质的数量的信息,以 * total * 表示。如果用数字而不是country_txt编写代码更容易,那么这些国家也有一个关联的数字。有国家编号的列就是"国家"。
对于解决方案,我一直在寻找panda的"groupby"函数,但我对编码真的很陌生,所以我很难理解文档,而且似乎melt或pivot函数可能会有帮助。

s8vozzvw

s8vozzvw1#

这个简化的示例说明了如何使用groupby -

import pandas as pd

df = pd.DataFrame({'country': ['Nigeria', 'Nigeria', 'Nigeria', 'Mali'],
        'year': [2000, 2000, 2001, 2000],
        'events1': [ 3, 4, 5, 2],
        'events2': [1, 6, 3, 4]
       })

df2 = df.groupby(['country', 'year'])[['events1', 'events2']].sum()

print(df2)

该表按国家和年份列出了各类事件的总数

events1  events2
country year                  
Mali    2000        2        4
Nigeria 2000        7        7
        2001        5        3

相关问题