python字典创建新的数据框列

时间:2016-04-19 15:16:25

标签: python dictionary pandas

我创建了一个字典,该字典由两个独立文件中两列的唯一值组成。这两列具有不同格式的等效值,因此不会正确合并。

数据框A:

A  B
1  dfg 
2  srg
3  sgf
4  sfh
3  srg
6  srg
1  sfg

d={1: 1.102832,
   2: 2.102832,
   3: 3.102832,
   4: 4.102832,
   5: 5.102832,
   6: 6.102832,
   7: 7.102832}

最终产品应如下所示:

A  B     C
1  dfg  1.102832
2  srg  2.102832
3  sgf  3.102832
4  sfh  4.102832
3  srg  3.102832
6  srg  6.102832
1  sfg  1.102832

我尝试使用pandas.Series.map,如下所示:

s["C"]=s["A"].map(dictionary)

不幸的是我的结果如下:

A  B     C
1  dfg  NaN
2  srg  NaN
3  sgf  NaN
4  sfh  NaN
3  srg  NaN
6  srg  NaN
1  sfg  NaN

我错过了什么?

2 个答案:

答案 0 :(得分:0)

for key,value in d.iteritems():
    A.ix[A['A']==key,'C'] = value 

假设您的第一个数据框名为“A”,您的字典称为“d”

答案 1 :(得分:0)

理论上你所尝试的应该是有用的。但是,您必须特别注意s['A']中值的类型和d中的键,以免它们无法平等对比。例如,如果s['A']包含字符串,而d.keys()包含整数,则

import pandas as pd
d = {1: 1.102832,
     2: 2.102832,
     3: 3.102832,
     4: 4.102832,
     5: 5.102832,
     6: 6.102832,
     7: 7.102832}

s = pd.DataFrame({
    'A':'1 2 3 4 3 6 1'.split(),
    'B':'dfg srg sgf sfh srg srg sfg'.split()})

s['C'] = s['A'].map(d)
print(s)

产量

   A    B   C
0  1  dfg NaN
1  2  srg NaN
2  3  sgf NaN
3  4  sfh NaN
4  3  srg NaN
5  6  srg NaN
6  1  sfg NaN

如果您将s['A']转换为数值:

s['A'] = pd.to_numeric(s['A'], errors='coerce')
s['C'] = s['A'].map(d)
print(s)

然后你得到了理想的结果:

   A    B         C
0  1  dfg  1.102832
1  2  srg  2.102832
2  3  sgf  3.102832
3  4  sfh  4.102832
4  3  srg  3.102832
5  6  srg  6.102832
6  1  sfg  1.102832