基于python中的pandas索引在新列中添加值

时间:2017-08-11 13:11:46

标签: python pandas

我刚刚进入大熊猫,我正在尝试向现有数据框添加新列。

我有两个数据帧,其中一个数据帧的索引链接到另一个数据帧中的列。在这些值相等的情况下,我需要将源数据帧中另一列的值放在目标列的新列中。

下面的代码部分说明了我的意思。评论部分是我需要的输出。

我想我需要.loc[]功能。

另一个小问题:拥有非唯一索引是不好的做法吗?

import pandas as pd

d = {'key':['a',  'b', 'c'], 
     'bar':[1, 2, 3]}

d2 = {'key':['a', 'a', 'b'],
      'other_data':['10', '20', '30']}

df = pd.DataFrame(d)
df2 = pd.DataFrame(data = d2)
df2 = df2.set_index('key')

print df2

##    other_data  new_col
##key           
##a            10   1
##a            20   1
##b            30   2

3 个答案:

答案 0 :(得分:2)

您可以使用join

df2.join(df.set_index('key'))

    other_data  bar
key                
a           10    1
a           20    1
b           30    2

在流程中重命名列的一种方法

df2.join(df.set_index('key').bar.rename('new'))

    other_data  new
key                
a           10    1
a           20    1
b           30    2

答案 1 :(得分:1)

使用combine_first

In [442]: df2.combine_first(df.set_index('key')).dropna()
Out[442]:
     bar other_data
key
a    1.0         10
a    1.0         20
b    2.0         30

,使用map

In [461]: df2.assign(bar=df2.index.to_series().map(df.set_index('key')['bar']))
Out[461]:
    other_data  bar
key
a           10    1
a           20    1
b           30    2

答案 2 :(得分:1)

.loc

的帮助下
df2['new'] = df.set_index('key').loc[df2.index]

输出:

   other_data  new
key                
a           10    1
a           20    1
b           30    2