【发布时间】:2019-11-24 00:13:13
【问题描述】:
你好,
我有两个数据框,我想遍历我的第一个 DF 的子集并将值合并到我的第二个 DF。
我的数据如下:
DF1
product survey_id
X1 survey_1
x2 survey_1
x3 survey_2
x4 survey_3
x5 survey_3
x1 survey_3
: :
x(i) survey(j)
我的第二个 DF 包含相同的产品(在 DF2 中只出现一次/唯一),我添加了一个空列来输入调查编号。
DF2
product survey_id
x1 nan
x2 nan
: :
: :
x(i) nan
我想要做的是为每个调查获取 DF1 的一个子集并将它们合并到 DF2 中,这样如果一个产品出现不止一次,最新的调查 ID 将出现在调查 ID 列中:
surveys = DF1['survey_id'].unique()
for survey in surveys:
DF2 = DF2.merge(DF1['survey_id'] == survey], how='left', on='product')
如果我对调查列表进行排序,我将能够按时间顺序合并调查数据。从那里我想在每次迭代中合并/填充survey_id 列,如果产品出现多次,则覆盖survey_id 值。
我希望获取 DF1 的一个子集,例如
DF1[DF1['survey_id']=='survey_1']
并将所有这些数据合并到 DF2。因此,只要 DF1 和 DF2 中的 x(i) 匹配,我们就有
DF2['survey_id'] = 'survey_1'
这个循环的下一次迭代将使用一个子集,其中
DF1[DF1['survey_id']=='survey_2']
并且在产品匹配的情况下,survey_id 值将设置为“survey_2”。如果survey_id仍然是NaN,则应覆盖或填充它
编辑:
output
product survey_id
X1 survey_3
x2 survey_1
x3 survey_2
x4 survey_3
x5 survey_3
不确定合并是否是解决此问题的最佳方法。我试图使用 .loc 但这似乎也不起作用:
DF2['survey_id'] = DF1['survey_id'].loc[DF1['product'] == DF2['substance']]
【问题讨论】:
-
对于所有产品 xi,我们需要survey_j 使得 j 最大。这是你想要的吗?
标签: python sql pandas numpy merge