【发布时间】:2020-11-05 22:02:37
【问题描述】:
让我们举一个简单的例子。我有第一个数据框:
df = pd.DataFrame(dict(Name=['abc','def','ghi'],NoMatter=['X','X','X']))
df
Name NoMatter
0 abc X
1 def X
2 ghi X
由于某些原因,我想使用一个 for 循环,将列值添加到 df 并从另一个数据帧中进行一些处理,每次迭代都会发生变化:
# strucutre of for loop I would like to use :
for i in range(something) :
add the column Value to df from df_value
other treatment not usefull here
# appearance of df_value (which change at each iteration of the for loop) :
Name Value
0 abc 1
1 def 2
2 ghi 3
但是,我不希望使用合并,因为这需要在添加当前迭代之一之前删除在上一次迭代中添加的列值。有没有一种方法可以通过这样的分配将 Value 列添加到 df :
df['Value'] = XXX
预期输出:
Name NoMatter Value
0 abc X 1
1 def X 2
2 ghi X 3
[编辑]
我不想使用合并,因为在 for 循环的第四次迭代中,df 将包含列:
名称 NoMatter Value1 Value2 Value3 Value4
而我只想拥有:
名称NoMatter Value4
我可以每次都删除上一列,但似乎效率不高。这就是为什么我只是在寻找一种方法来为 Value 列分配值,而不是添加列。就像 Excel 中的等效 vlookup 函数从 df_value 数据应用于 df。
【问题讨论】:
-
您的预期输出是什么?不清楚。
-
@Serge Ballesta,我只想将 Value 列添加到 df,没有任何其他处理(我在帖子中谈到了一些处理以证明使用 for 循环的合理性)。感谢您的帮助
-
如果你只想合并特定的列,那么
df2 = pd.merge(df[['Name','Value']], df1, how='left',on='Name']) -
@David Erickson 谢谢,但没有:如果我这样做,在第二次迭代中,我将获得第一次迭代和第二次迭代的列值,我想替换值列。我可以使用合并,然后删除以前的值列,但效率不高
标签: python pandas dataframe merge