在熊猫中串联两个df

时间:2019-02-28 07:11:08

标签: python python-3.x pandas merge concatenation

我想知道是否有一种方法可以在将一个df中的值与另一个df或另一个df中同时存在之前进行验证,然后再将它们堆叠在一起?

我有两个dfs

df = pd.concat([df1, df2])
df = df.sort_values(by=['id', 'timestamp']).reset_index(drop=True)
df

   id  timestamp
0   1 1959-06-01
1   1 2019-01-01
2   1 2019-01-02
3   2 1989-12-01
4   2 2019-01-15
5   3 1999-01-25
6   3 2019-01-17
7   3 2019-02-01
8   3 2019-02-03

在合并之前,有没有办法在连接之前验证df1中的I.D是否存在?我不需要合并,而是将df彼此串联在一起。

一个df具有多个ID和时间戳,另一个df仅具有一个ID,我想确保在这两个级联的df中只有两个ID中都存在的ID

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以在此处执行的一种解决方法是创建一个虚拟列:

df1["df"] = 1
df2["df"] = 2
df = pd.concat([df1, df2])

这样,您可以看到每一行的派生位置。

答案 1 :(得分:0)

检查整行

df3=pd.concat([df1,df2[~df2.isin(df1)]],ignore_index=True).dropna()

检查一列

df3=pd.concat([df1,df2[~df2['col_name'].isin(df1['col_name'])]],ignore_index=True).dropna()

答案 2 :(得分:0)

这是您要找的吗? 附加示例代码。

df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],'B': ['B0', 'B1', 'B2']})
new = df.set_index('key').join(other.set_index('key'))
new.dropna(axis=0, how='any', thresh=None, subset=None, inplace=True)
print(new)

import pandas as pd 
df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],'A': ['A0', 'A1', 'A2']})
new = pd.merge(df , other , how = 'inner')
print(new)

这对您有帮助吗?

答案 3 :(得分:-1)

您可以使用df.isin,请尝试。.