Python 数据帧中dicts列列表的解包列表
我有df_,其中一列是DICT列表: 我想要实现的是一种解包B的通用方法,这样在本例中,每个唯一键B1、B2和B3都会被放入一列中。并在每行中叠加两个多列表作为新的观察值。我认为一个示例输出最好地解释了这一点:Python 数据帧中dicts列列表的解包列表,python,pandas,dataframe,Python,Pandas,Dataframe,我有df_,其中一列是DICT列表: 我想要实现的是一种解包B的通用方法,这样在本例中,每个唯一键B1、B2和B3都会被放入一列中。并在每行中叠加两个多列表作为新的观察值。我认为一个示例输出最好地解释了这一点: df_out = pd.DataFrame({ 'A': [1, 1, 1, 2, 3, 3], 'B1': [1, 4, 7, 10, 13, 16], 'B2': [2, 5, 8, 11, 14, 17], 'B3': [3, 6, 9, 12, 1
df_out = pd.DataFrame({
'A': [1, 1, 1, 2, 3, 3],
'B1': [1, 4, 7, 10, 13, 16],
'B2': [2, 5, 8, 11, 14, 17],
'B3': [3, 6, 9, 12, 15, 18],
'C': ['a', 'a', 'a', 'b', 'c', 'c']
})
df_out
A B1 B2 B3 C
0 1 1 2 3 a
1 1 4 5 6 a
2 1 7 8 9 a
3 2 10 11 12 b
4 3 13 14 15 c
5 3 16 17 18 c
有什么想法吗?使用字典理解和摘录栏:
df1 = pd.concat({k: pd.DataFrame(x) for k, x in df_in.pop('B').items()})
print (df1)
B1 B2 B3
0 0 1 2 3
1 4 5 6
2 7 8 9
1 0 10 11 12
2 0 13 14 15
1 16 17 18
按和添加原始数据以获得正确的顺序提取并追加C列:
对于正确的顺序,可使用以下替代解决方案:
将字典理解与和用于摘录列:
df1 = pd.concat({k: pd.DataFrame(x) for k, x in df_in.pop('B').items()})
print (df1)
B1 B2 B3
0 0 1 2 3
1 4 5 6
2 7 8 9
1 0 10 11 12
2 0 13 14 15
1 16 17 18
按和添加原始数据以获得正确的顺序提取并追加C列:
对于正确的顺序,可使用以下替代解决方案:
您可以尝试取消堆叠DICT列表,然后将DICT作为数据帧读取并添加到df_中:
您可以尝试取消堆叠DICT列表,然后将DICT作为数据帧读取并添加到df_中:
df = df_in.join(df1.reset_index(level=1, drop=True)).reset_index(drop=True)
df['C'] = df.pop('C')
print (df)
A B1 B2 B3 C
0 1 1 2 3 a
1 1 4 5 6 a
2 1 7 8 9 a
3 2 10 11 12 b
4 3 13 14 15 c
5 3 16 17 18 c
df1 = pd.concat([pd.DataFrame(v['B']).assign(A=v['A'], C=v['C'])
for k, v in df_in.to_dict('index').items()], ignore_index=True)
df1.insert(0, 'A', df1.pop('A'))
print (df1)
A B1 B2 B3 C
0 1 1 2 3 a
1 1 4 5 6 a
2 1 7 8 9 a
3 2 10 11 12 b
4 3 13 14 15 c
5 3 16 17 18 c
df_in = df_in.explode('B')
df_out = pd.concat([df_in.reset_index(drop=True),
pd.DataFrame(df_in['B'].tolist())],
axis=1).drop('B', axis = 1).sort_index(axis=1)
df_out
A B1 B2 B3 C
0 1 1 2 3 a
1 1 4 5 6 a
2 1 7 8 9 a
3 2 10 11 12 b
4 3 13 14 15 c
5 3 16 17 18 c