Python 将defaultdicts的iterable连接到数据帧

Python 将defaultdicts的iterable连接到数据帧,python,pandas,dictionary,dataframe,defaultdict,Python,Pandas,Dictionary,Dataframe,Defaultdict,我现在拥有的简化示例: from collections import defaultdict d1 = defaultdict(list) d2 = defaultdict(list) d1['a'] = [1, 2, 3] d1['b'] = [True, True, True] d2['a'] = [4, 5 , 6] d2['b'] = [False, False, False] 预期结果: a b 0 1 True 1 2 True 2 3 T

我现在拥有的简化示例:

from collections import defaultdict

d1 = defaultdict(list)
d2 = defaultdict(list)

d1['a'] = [1, 2, 3]
d1['b'] = [True, True, True]

d2['a'] = [4, 5 , 6]
d2['b'] = [False, False, False]
预期结果:

   a      b
0  1   True
1  2   True
2  3   True
3  4  False
4  5  False
5  6  False
下面这一行可以工作,但我正在寻找一种替代方法,它不必为每个defaultdict实例化单独的数据帧

pd.concat([pd.DataFrame(d) for d in (d1, d2)]).reset_index(drop=True)
也可以从以下方面开始:

pd.DataFrame([d1, d2])

并将其转换为长格式。

您可以合并
指令,然后实例化数据帧

d3 = {k : d1[k] + d2[k] for k in d1}
d3
{'a': [1, 2, 3, 4, 5, 6], 'b': [True, True, True, False, False, False]}

df = pd.DataFrame(d3)
df
   a      b
0  1   True
1  2   True
2  3   True
3  4  False
4  5  False
5  6  False

自动合并多个对象:

d3 = defaultdict(list)
for d in dict_list:
    for k in d:
        d3[k].extend(d[k])

df = pd.DataFrame(d3)

您可以合并
dicts
,然后实例化数据帧

d3 = {k : d1[k] + d2[k] for k in d1}
d3
{'a': [1, 2, 3, 4, 5, 6], 'b': [True, True, True, False, False, False]}

df = pd.DataFrame(d3)
df
   a      b
0  1   True
1  2   True
2  3   True
3  4  False
4  5  False
5  6  False

自动合并多个对象:

d3 = defaultdict(list)
for d in dict_list:
    for k in d:
        d3[k].extend(d[k])

df = pd.DataFrame(d3)

使用您的
pd.concat

pd.DataFrame([d1, d2]).stack().apply(pd.Series).unstack(-2).\
    T.sort_index(level=1).reset_index(drop=True)

Out[648]: 
   a  b
0  1  1
1  2  1
2  3  1
3  4  0
4  5  0
5  6  0

使用您的
pd.concat

pd.DataFrame([d1, d2]).stack().apply(pd.Series).unstack(-2).\
    T.sort_index(level=1).reset_index(drop=True)

Out[648]: 
   a  b
0  1  1
1  2  1
2  3  1
3  4  0
4  5  0
5  6  0