将一列的每一行存储为字典值熊猫

时间:2018-10-29 06:20:43

标签: python-2.7 pandas

我是熊猫数据框的新手,要完成此任务还有些棘手。

我有一个这样的数据框。 DataFrame

文本格式:

SegmentUpper SegmentLower物料编号LowerLimitAVLower LowerLimitAVUpper UpperLimitAVUpper UpperLimitAVLower RawSegments SiteID参数ParameterDesc

A高位A低位111 0 1 2 3 [] 2 P1 {'abc':'p1'}

B上层B下层111 1 2 3 4 [] 2 P1 {'abc':'p1'}

C高C低111 2 3 4 5 [] 2 P1 {'abc':'p1'}

D高D低111 3 4 5 6 [] 2 P1 {'abc':'p1'}

A上层A下层111 1 2 3 4 [] 2 P2 {'abc':'p2'}

B上层B下层111 3 2 3 4 [] 2 P2 {'abc':'p2'}

C高C低111 3 3 4 6 [] 2 P2 {'abc':'p2'}

D高D低111 2 4 5 7 [] 2 P2 {'abc':'p2'}

A上A下222 0 3 4 5 [] 2 P1 {'abc':'p1'}

B上B下222 3 5 7 9 [] 2 P1 {'abc':'p1'}

C上C下222 2 5 7 8 [] 2 P1 {'abc':'p1'}

D上D下222 3 8 6 9 [] 2 P1 {'abc':'p1'}

我必须创建一个类型为list的新列,并将多个字典值存储到其中。

基本上,如上图所示,我能够找到使用以下代码将列“ Rawsegment ”列为列表的方法:

DataDF['RawSegment'] = np.empty((len(DataDF), 0)).tolist()

现在最棘手的部分是使用现有数据框中其他列的值向其中添加字典值

例如:我有一个列,分别为Segment Upper,Segment Lower,LowerLimitAVLower,LowerLimitAVUpper,UpperLimitAVLower,UpperLimitAVLower,MaterialNumber

,我希望最终输出为 Final DataFrame

每种物料编号和参数将所有A,B,C,D上,下限值作为字典存储,并保留其他列。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先将列MaterialNumber转换为索引列和rename列,以将_拆分为stack的3列DataFrame,然后将groupby与{{ 3}}和apply(针对字典):

d = {'SegmentUpper':'Upper_Segment',
     'SegmentLower':'Lower_Segment',
     'LowerLimitAVLower':'Lower_LimitAVLower',
     'LowerLimitAVUpper':'Lower_LimitAVUpper',
     'UpperLimitAVUpper':'Upper_LimitAVUpper',
     'UpperLimitAVLower':'Upper_LimitAVLower'}
df = df.set_index('MaterialNumber').rename(columns=d)
df.columns = df.columns.str.split('_', expand=True)
df1 = (df.stack(0)[['Segment','LimitAVLower','LimitAVUpper']]
        .groupby(level=0).apply(lambda x: x.to_dict('r'))
        .reset_index(name='RawSegments'))
print (df1)
   MaterialNumber                                        RawSegments
0             111  [{'Segment': 'A Lower', 'LimitAVLower': 0.0, '...
1             222  [{'Segment': 'A Lower', 'LimitAVLower': 0.0, '...