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