你可以帮我加入两个DataFrame。
我有两个DataFrame。
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
我需要基于前两个创建一个DataFrame,左边连接两列。列索引和val2在两个DataFrame中具有相同的名称。 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中的val2相同,则应删除df2中不存在的df1索引,然后将1添加到新列val3中,否则:NaN。
提前非常感谢!
答案 0 :(得分:4)
这是一种方式。如下所示,我建议您使用布尔而不是float
作为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
答案 1 :(得分:2)
您可以尝试将import android.support.design.widget.CoordinatorLayout;
(默认为)与join
一起使用,以便df2的列名重命名为后缀。然后,使用rsuffix
检查列值是否匹配,并为np.where
列分配值。
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)
答案 2 :(得分:1)
由于您希望合并索引和列的组合,您可以将它们全部添加到索引,或者在合并之前添加[program:site]
command=bash -c "/home/some/virtual/env/dir/run/start.sh"
user=some
stdout_logfile=/home/some/etc/supervisor/logs/logging.log
redirect_stderr=true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8,HOME="/home/some",USER="some"
stopsignal=KILL
killasgroup=true
autostart=true
。我们还会将reset_index
列分配给df2,以便将其合并。
val3
输出:
(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')