这是一张缩短的表格。
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方式更受欢迎!
答案 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']