如何在Python中检查另一个数据框中的pandas数据帧的ID?

时间:2015-12-13 17:21:25

标签: python pandas dataframe concat

您好我有以下数据框:

df = 
ID   Value
a     45
b     3
c     10

另一个具有每个值的数字ID的数据框

df1 =

ID    ID_n
a      3
b      35
c      0
d      7
e      1

我希望在df中添加一个包含数字ID的新列,因此:

df = 
ID   Value  ID_n
a     45     3
b     3      35 
c     10     0

由于

3 个答案:

答案 0 :(得分:1)

使用pandas merge:

import pandas as pd

df1 = pd.DataFrame({
    'ID': ['a', 'b', 'c'],
    'Value': [45, 3, 10]
})

df2 = pd.DataFrame({
    'ID': ['a', 'b', 'c', 'd', 'e'],
    'ID_n': [3, 35, 0, 7, 1],
})

df1.set_index(['ID'], drop=False, inplace=True)
df2.set_index(['ID'], drop=False, inplace=True)

print pd.merge(df1, df2, on="ID", how='left')

输出:

  ID  Value  ID_n
0  a     45     3
1  b      3    35
2  c     10     0

答案 1 :(得分:0)

您可以使用join()

In [14]: df1.join(df2)
Out[14]: 
    Value  ID_n
ID             
a      45     3
b       3    35
c      10     0

如果您希望index为数字,则可以reset_index(),

In [17]: df1.join(df2).reset_index()
Out[17]: 
  ID  Value  ID_n
0  a     45     3
1  b      3    35
2  c     10     0

答案 2 :(得分:0)

您可以在一次操作中执行此操作。 join适用于您似乎没有设置的索引。只需将索引设置为ID,在将其索引设置为df后加入ID,然后重置索引以返回添加了新列的原始数据框。

>>> df.set_index('ID').join(df1.set_index('ID')).reset_index()
  ID  Value  ID_n
0  a     45     3
1  b      3    35
2  c     10     0     

此外,由于您未在set_index上进行df1,因此其结构保持不变(即您不会更改其索引)。