合并2张熊猫表并使用它们

时间:2019-12-27 14:50:55

标签: pandas pandas-groupby sklearn-pandas

我有2张熊猫桌, 表A是这样的:

Date  a    b   c    d   e
0
...
.
.
.
2n

和具有类似内容的表B

Date f  g  k  h   i   j
2
.
.
..
.
.
2n-3
.

问题是每个表都有完全不同的日期和完全不同的列,但是我想得到一个新表,如果它是以前没有的列,则为0,还有一个新的二进制列(可以校准它) MARK),用于标记其是否来自表A或B。 像这样的东西:

Date   MARK  a    b   c    d   e  f  g  e  h   i   j
0        1   .    .    .   .   .  0  0  0  0   0    0
.
2        0   0    0   0    0   0  .  .   .  .  .    .
.
.
.
.
.
2n-3        0   0    0   0    0   0  .  .   .  .  .    .
.
.
2n        1   .    .    .   .   .  0  0  0  0   0    0 

我需要按日期对它进行排序...请为此提供帮助... 谢谢

2 个答案:

答案 0 :(得分:2)

在“:”之前添加“标记”列:

df1['Mark'] = 0
df2['Mark'] = 1

然后pd.concat完全按照您的意愿进行操作:

df = pd.concat([df1, df2], axis = 0, sort= True)

注意:确保您的日期是两个日期的索引:

df1 = df1.set_index('date_column')
df2 = df2.set_index('date_column')

答案 1 :(得分:1)

其他选择是将合并与指标功能一起使用:

df = df1.merge(df2, on='Date', how='outer', indicator='Mark')

这将用left_only或right_only指示数据来自哪个数据帧。 您可以像这样将其更改为0和1:

df['Mark'] = (df['Mark'] == 'right_only').astype(int)

完整示例:

df1 = pd.DataFrame(
    data={'Date': pd.date_range('2019-01-01', '2019-01-03'), 
          'a': [1,1,1], 
          'b': [2,2,2]})
df2 = pd.DataFrame(
    data={'Date': pd.date_range('2019-01-11', '2019-01-13'), 
          'c': [3,3,3], 
          'd': [4,4,4]})
df = df1.merge(df2, on='Date', how='outer', indicator='Mark')
df['Mark'] = (df['Mark'] == 'right_only').astype(int)