Python 2.7 pandas填补缺失的数字/系列

时间:2015-12-29 05:46:28

标签: python-2.7 pandas

这是一张缩短的表格。

ID,NUMBER,DEVICE
A,103,L
A,104,L
B,101,L
B,102,D
C,101,V
C,102,V
C,103,L
C,104,L

这里的目标是为每个唯一的“ID”输出“DEVICE”模式。 “数字”栏中共有4个数字:101,102,103,104。如果缺少任何“NUMBER”列,我们在“DEVICE”列中填写“N”。例如,“A”ID中缺少数字101和102,因此我们希望以下列方式填写:

ID,NUMBER,DEVICE
A,101,N
A,102,N
A,103,L
A,104,L

这里的目标是为每个唯一的“ID”输出“DEVICE”模式。因此,通过在“DEVICE”列中填写必要的“N”,我们希望通过使用“groupby”获得这样的输出:

{ “A,NNLL”, “B,LDNN”, “C,VVLL”}

任何大师都可以帮助解决第一个缺失的值吗? Python Pandas方式更受欢迎!

1 个答案:

答案 0 :(得分:2)

这是一个单行(实际上是8行,但为了便于阅读而破了)。您请求的输出无效:它既不是列表也不是字典。我已将内容导出为字典,但如果您愿意,可以使用列表格式。

>>> {key: "".join(value) 
     for key, value in 
     df
     .pivot(index='ID', columns='NUMBER', values='DEVICE')
     .fillna('N')
     .T
     .to_dict('list')
     .iteritems()}
{'A': 'NNLL', 'B': 'LDNN', 'C': 'VVLL'}

解决方案的主要部分是数据透视表,我们使用N填充缺失值。

>>> df.pivot(index='ID', columns='NUMBER', values='DEVICE').fillna('N')
NUMBER 101 102 103 104
ID                    
A        N   N   L   L
B        L   D   N   N
C        V   V   L   L

这基本上可以得到我们想要的数据,现在我们只需要对其进行重组。如果我们将输出调用df2以上,则:

result_dict = df2.T.to_dict('list')
>>> result_dict
{'A': ['N', 'N', 'L', 'L'],
 'B': ['L', 'D', 'N', 'N'],
 'C': ['V', 'V', 'L', 'L']}

反过来,这可以使用字典理解连接在一起:

result_dict2 = {key: "".join(value) for key, value in result_dict.iteritems()}
>>> result_dict2
{'A': 'NNLL', 'B': 'LDNN', 'C': 'VVLL'}

或者,您可以使用列表理解:

result3 = [key + ", " + "".join(value) for key, value in result_dict.iteritems()]
>>> result3
['A, NNLL', 'C, VVLL', 'B, LDNN']