Python 从两个csv文件中删除Groupby

Python 从两个csv文件中删除Groupby,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,所以我在Datacamp做一个练习,它告诉你从两个文件中按地区汇总预期寿命 寿命名称,带列:[“国家”、“预期寿命”] 资料来源: 地区名称,列:[“国家”、“地区”] 资料来源: 我理解index_col对一个数据帧的作用,但我不理解的是python如何在多个数据帧中找到“公共分母”列[“国家”] 我没有明确说明: 生活['Country']==地区['Country'.你的怀疑是正确的。熊猫/巨蟒100%不推断生命['Country']==区域['Country']。如果我错了,有人会纠正

所以我在Datacamp做一个练习,它告诉你从两个文件中按地区汇总预期寿命

寿命名称,带列:[“国家”、“预期寿命”] 资料来源:

地区名称,列:[“国家”、“地区”] 资料来源:

我理解index_col对一个数据帧的作用,但我不理解的是python如何在多个数据帧中找到“公共分母”列[“国家”]

我没有明确说明:


生活['Country']==地区['Country'.

你的怀疑是正确的。熊猫/巨蟒100%不推断
生命['Country']==区域['Country']
。如果我错了,有人会纠正我(我不是熊猫专家),但当你陈述
生活.groupby(regions['region'])
时,你告诉熊猫做两件基本的事情:

首先:熊猫看到您想要按
区域['region']
分组。为此,它将
区域['region']
系列的所有索引映射到它们所属的任何组

Second:Pandas获取从索引到组的映射,并将其应用于
life
数据帧的索引

为什么这样做有效?纯属巧合。这种方法有效的唯一原因是(a)您的数据帧具有相同的长度,(b)您的数据帧索引恰好是协同编码的。所以这个groupby操作碰巧奏效,但你应该知道这一切都是偶然的。如果您希望以合理可靠的方式实际执行此操作,那么您应该合并
国家
(或任何合适的)上的两个数据帧,然后执行groupby。希望这有帮助

编辑:添加了有关如何正确执行此操作的示例:

pd.merge(life, regions, how='left', left_index=True, 
         right_index=True).groupby('region')['2010'].mean()

虽然这种分组一开始可能看起来很危险,也很随意,但事实证明它表现得相当好

这里的关键是,当您将
序列作为分组对象传递给
DataFrame.groupby()
时,默认情况下,它会在索引上对齐序列。通常,您会将一个
DataFrame
按它自己的一列分组,在这种情况下,实际上可以保证索引上的对齐。但在这种情况下,因为两个
数据帧
都将
国家
作为其索引,因此将
寿命
中的值与正确的
区域
适当对齐,并计算平均值

两个
数据帧
甚至可以按不同顺序排列,并且可以有不同数量的总元素,计算将正常进行。以下三个例子应说明这一点:

样本数据 案例1: 两个数据帧共享相同的索引,长度相同,但排序方式不同

df1.groupby(df2.region).mean()
#         val
#region      
#region1  4.5
#region2  2.0
因为序列首先在索引上对齐,所以每个区域的平均值仍然可以正确计算<代码>区域1包含
'E'
'D'
,其值分别为
4和
5

案例2: 分组
DataFrame
的长度较短,并且不包含要分组的
DataFrame
中的所有国家/地区

df1.groupby(df3.region).mean()
#         val
#region      
#region1  4.5
#region2  2.5
df1.groupby(df3.region).mean()
#         val
#region      
#region1  4.5
#region2  2.0
同样,计算工作正常<代码>'A'
没有区域,因此不再包括它,并且正确计算每个区域的平均值

It is better to do group by after merging the data frame,it works 
well even index is not same.


 df1 = pd.DataFrame({"Country": ['A', 'B', 'C', 'D', 'E',"F"], 
                "life_expectency": [60, 70, 80, 50, 100,80]})


df2 = pd.DataFrame({"Country": ['E', 'D', 'C', 'B', 'A'], 
                "region": ['region1', 'region1', 'region2', 
                           'region2', 'region2']})

pd.merge(df1,df2,how="left").groupby("region")[2010].mean()

note-taken same dataframes from ALollz answer.
案例3 分组
DataFrame
包含的组比要分组的
DataFrame

df1.groupby(df3.region).mean()
#         val
#region      
#region1  4.5
#region2  2.5
df1.groupby(df3.region).mean()
#         val
#region      
#region1  4.5
#region2  2.0
由于额外组不与分组的
数据帧中的任何内容对齐,因此不会产生任何输出

基本上,唯一会导致问题的是,您用于分组的序列的索引是否重复。然后,
pandas
无法确定如何正确对齐这些值

It is better to do group by after merging the data frame,it works 
well even index is not same.


 df1 = pd.DataFrame({"Country": ['A', 'B', 'C', 'D', 'E',"F"], 
                "life_expectency": [60, 70, 80, 50, 100,80]})


df2 = pd.DataFrame({"Country": ['E', 'D', 'C', 'B', 'A'], 
                "region": ['region1', 'region1', 'region2', 
                           'region2', 'region2']})

pd.merge(df1,df2,how="left").groupby("region")[2010].mean()

note-taken same dataframes from ALollz answer.