繁体   English   中英

通过将另一个数据框与一对多关系进行匹配来创建新列的数据框

[英]Create a new column's dataframe by matching another dataframe many to one relationship

我是使用熊猫库的新手,而且还不熟悉数据框。 我正在尝试通过使用dataframe1中列的值将列添加到dataframe1中,将此值用作dataframe2的索引,并获取相应的值

我有两个数据框:

df1 = pandas.DataFrame({'customer' : pd.Series([28, 28, 29, 30],
                                     index=['0', '1', '3', '4']),
                        'store' : pd.Series([14, 14, 14, 22], 
                                  index=['0', '1', '3', '4'])})

df2 = pandas.DataFrame({'value': pd.Series([6, 7, 8], 
                                 index=[0, 1, 2]),
                         'store': pd.Series([14, 14, 22], 
                                  index=[0,1, 2])})

df2.groupby(['store']).agg({'Value':[sum]})

我的目标是在df1中添加一个列,该列在索引中包含与df2值相对应的索引中的“值”

预期输出:

df3 = {'customer' : pd.Series([28., 28., 29., 30.], index=['0', '1', '3', '4']),
'store' : pd.Series([14, 14, 14, 22], index=['0', '1', '3', '4']),
'value' : pd.Series([6, 6, 6, 8], index=['0', '1', '3', '4']}

我试过了:

for index, row in df1.iterrows():
    df1['Values'] = df2.loc[row['store']]

但是我得到TypeError:与框架索引不兼容的插入列索引

for index, row in df1.iterrows():
    df1['Values'] = df2.loc[pd.Index(row['store'])]

但是我得到一个TypeError:

Index(...) must be called with a collection of some kind, 'int' was passed

非常感谢您的帮助,我真的很努力

让我们更改groupby语句以创建pd.Series并使用map

s = df2.groupby(['store'])['value'].agg('sum')
df1['value'] = df1['store'].map(s)

df1 

输出:

   customer  store  value
0        28     14     13
1        28     14     13
3        29     14     13
4        30     22      8

在将df2汇总为唯一store值之后,这对我有用:

df1['value'] = [int(df2[df2.store==s].value) for s in df1.store]

您只需要:

df1.merge(df2.reset_index(), how='left', on=['store'])

输出:

  customer  store   value
0   28       14      13
1   28       14      13
2   29       14      13
3   30       22       8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM