您好我有以下数据框:
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
由于
答案 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
,因此其结构保持不变(即您不会更改其索引)。