Python 3.x python dataframe:在第二个dataframe中创建一列,根据第一个dataframe中匹配的项使用聚合值
我有以下数据帧:Python 3.x python dataframe:在第二个dataframe中创建一列,根据第一个dataframe中匹配的项使用聚合值,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有以下数据帧: df1: id | country | state | amt1 | amt2 | var1 | var2 1 | US | TX | 20 | 40 | a | X 2 | US | CA | 30 | 900 | b | Y 3 | US | CA | 40 | 230 | c | X 4 | US | TX | 80 | 670 | d | X 5 | US | NY | 20 | 120 | a | Y 6 | US | TX | 10 | 80 | c | X 这
df1:
id | country | state | amt1 | amt2 | var1 | var2
1 | US | TX | 20 | 40 | a | X
2 | US | CA | 30 | 900 | b | Y
3 | US | CA | 40 | 230 | c | X
4 | US | TX | 80 | 670 | d | X
5 | US | NY | 20 | 120 | a | Y
6 | US | TX | 10 | 80 | c | X
这是一个示例dataframe—我拥有的原始dataframe有多个其他列,具有不同类型的变量
我想创建另一个数据帧,该数据帧将包含来自第一个数据帧的任何列的聚合率(总和/计数/任何其他函数),每个匹配的国家/州
为此,我已经创建了第二个数据框,其中包含国家分组,州:
df2:
country | state | num
US | TX | 3
US | CA | 2
US | NY | 1
现在,我希望能够将任何列添加到df2,这将包含匹配国家和州的“df1”中的“amt1”之和
我可以使用iterrows执行此操作:
for i, row in df2.iterrows():
amt = df1[(df1.state == df2.state ) & (df1.country == df2.country )].amt1.sum()
df2.set_value(i, 'Amt ', amt)
然而,对于大型数据集来说,这需要花费大量时间
想知道是否有其他有效的方法来实现这一点,而不是使用iterrows根据我的理解,您只需要
groupby
您的df1,获得amt1的总和,然后与df2合并
df2.merge(df1.groupby(['country','state'],as_index=False).amt1.sum())
Out[792]:
country state num amt1
0 US TX 3 110
1 US CA 2 70
2 US NY 1 20
那起作用了。。。谢谢@丽都Yw~:-)快乐编码