你能帮我连接两个数据帧吗。
我有两个数据帧。
DF1:
index val1 val2
--------------------
1 str1 abc1
2 str2 abc2
3 str3 abc3
4 str4 abc9
5 str5 abc4
DF2:
index val2
------------
1 abc1
2 abc2
4 abc3
5 abc4
9 abc5
我需要基于前两个数据帧创建一个数据帧,左连接两列。列index和val2在两个数据帧中具有相同的名称。df3的结果应该如下所示:
index val1 val2 val3
----------------------------
1 str1 abc1 1
2 str2 abc2 1
3 str3 abc3 NaN
4 str4 abc9 NaN
5 str5 abc4 1
应该删除df1中不存在的df2中的索引,如果df1中的索引具有与df2中相同的val2,则应该将1添加到新的列val3中,否则:NaN。
非常感谢提前!
由于您希望在索引和列的组合上进行合并,因此可以将它们全部添加到索引中,或者在合并之前reset_index
。我们还将val3
列分配给df2,以便合并它。
(df1.reset_index().merge(
df2.reset_index().assign(val3 = 1), on=['index', 'val2'], how='left')
.set_index('index'))
输出:
val1 val2 val3
index
1 str1 abc1 1.0
2 str2 abc2 1.0
3 str3 abc3 NaN
4 str4 abc9 NaN
5 str5 abc4 1.0
如果'index'
只是一列而不是索引,那么只需指定两个要合并的键即可。
df1.merge(df2.assign(val3 = 1), on=['index', 'val2'], how='left')
输出:
index val1 val2 val3
0 1 str1 abc1 1.0
1 2 str2 abc2 1.0
2 3 str3 abc3 NaN
3 4 str4 abc9 NaN
4 5 str5 abc4 1.0
您可以尝试将join
(默认值为左)与rsuffix
一起使用,以便使用后缀重命名df2的列名。然后,使用np。其中
检查列值是否匹配,并为val3
列赋值。
import numpy as np
df = df1.join(df2, rsuffix='_df2')
df['val3'] = np.where(df.val2 == df.val2_df2, 1, np.NaN)
del df['val2_df2']
print(df)
结果:
val1 val2 val3
index
1 str1 abc1 1.0
2 str2 abc2 1.0
3 str3 abc3 NaN
4 str4 abc9 NaN
5 str5 abc4 1.0
这是一个办法。如下所示,我建议您对val3
使用布尔值而不是浮动
,因为这就是这个系列所代表的。
# merge and set index
res = df1.merge(df2, how='left').set_index('index')
# map val2 from df2
res['val3'] = df2.set_index('index')['val2']
# check for equality of val3 and val2
res['val3'] = res['val3'] == res['val2']
print(res)
val1 val2 val3
index
1 str1 abc1 True
2 str2 abc2 True
3 str3 abc3 False
4 str4 abc9 False
5 str5 abc4 True
问题内容: 我有两个具有以下列名称的数据框: 我想通过加入(左)on获得以下列的数据框: 如果我要连接的列不是索引,我无法弄清楚该怎么做。最简单的方法是什么?谢谢! 问题答案: 您可以按以下方式使用left_on和right_on选项: 从问题中我不能确定您是否只想合并密钥是否位于左侧数据框中。如果是这种情况,则以下将执行此操作(以上内容实际上会进行多对多合并)
我有两个非常大的系列,只包含连接键。在不使用索引的情况下(在本例中没有意义),我希望以最有效的方式通过值将一个系列左键连接到另一个系列。 现在,我添加了一列1,这样我就可以使用和一个左连接,这样我就可以确定中的每个键是否也存在于Right中。 我确信我可以在不创建两个未使用的列的情况下完成这项工作,但是似乎希望为联接使用索引。有没有办法让两个系列的值保持不变?有没有更快的numpy版本? 例如:
问题内容: 我找不到关于交叉联接的任何信息,包括合并/联接或其他一些东西。我需要使用{my function}作为myfunc处理两个数据帧。相当于: 相当于: 但我需要更有效的解决方案:如果使用了应用,我将如何实现它们; ^^ 问题答案: 对于叉积,请参阅此问题。 本质上,您必须进行常规合并,但为每一行赋予相同的键以进行连接,以使每一行在框架之间相互连接。 然后可以通过应用函数将列添加到新框架:
我需要将两个数据帧和一个接一个地连接起来,它们具有相同的行数(),而不考虑任何键。此函数类似于
我有一个csv文件列表,我使用 我目前正在尝试遍历csv列表,并使用方法将axis参数设置为1,以按列将所有数据帧添加到一起。 它是工作的希望,但我遇到的问题,因为所有的数据帧都有相同的冒号名称,当我连接他们我得到例如10列都与关键"日期" 不管怎样,我能给哥伦布起个独一无二的名字吗?比如伦敦约会,柏林约会?显然,这些名称基于数据帧的名称。
问题内容: 我有一个熊猫数据框列表,我想将其合并为一个熊猫数据框。我正在使用Python 2.7.10和Pandas 0.16.2 我从以下位置创建了数据框列表: 这将返回数据帧列表 这是一些样本数据 我想将,和组合成一个熊猫数据框。另外,使用该选项时将大表直接读入数据框的方法将非常有帮助。 问题答案: 鉴于所有数据框都具有相同的列,您可以简单地将它们: