我刚刚进入大熊猫,我正在尝试向现有数据框添加新列。
我有两个数据帧,其中一个数据帧的索引链接到另一个数据帧中的列。在这些值相等的情况下,我需要将源数据帧中另一列的值放在目标列的新列中。
下面的代码部分说明了我的意思。评论部分是我需要的输出。
我想我需要.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
答案 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