如何从不等长列表的字典中创建虚拟数据框?
How can I create a dataframe of dummies from a dict of lists of unequal length?
我有一个字典,其中每个键都是一个行索引,每个值都是一个虚拟值列表。例如:
my_dict = {'row1': ['a', 'b'], 'row2': ['a'], 'row3': ['b', 'c']}
我可以用上面的方法高效地创建一个虚拟数据框吗?
>>> df
a b c
row1 True True False
row2 True False False
row3 False True True
您可以使用 pd.get_dummies
:
u = pd.DataFrame.from_dict(my_dict, orient='index')
pd.get_dummies(u, prefix='', prefix_sep='').max(level=0, axis=1).astype(bool)
a b c
row1 True True False
row2 True False False
row3 False True True
你也可以使用stack
和str.get_dummies
这样比较简洁,但是会稍微慢一些。
u.stack().str.get_dummies().max(level=0).astype(bool)
a b c
row1 True True False
row2 True False False
row3 False True True
crosstab
构造函数
s=pd.DataFrame(list(my_dict.values()),index=my_dict.keys()).stack()
pd.crosstab(s.index.get_level_values(0),s).astype(bool)
Out[131]:
col_0 a b c
row_0
row1 True True False
row2 True False False
row3 False True True
我有一个字典,其中每个键都是一个行索引,每个值都是一个虚拟值列表。例如:
my_dict = {'row1': ['a', 'b'], 'row2': ['a'], 'row3': ['b', 'c']}
我可以用上面的方法高效地创建一个虚拟数据框吗?
>>> df
a b c
row1 True True False
row2 True False False
row3 False True True
您可以使用 pd.get_dummies
:
u = pd.DataFrame.from_dict(my_dict, orient='index')
pd.get_dummies(u, prefix='', prefix_sep='').max(level=0, axis=1).astype(bool)
a b c
row1 True True False
row2 True False False
row3 False True True
你也可以使用stack
和str.get_dummies
这样比较简洁,但是会稍微慢一些。
u.stack().str.get_dummies().max(level=0).astype(bool)
a b c
row1 True True False
row2 True False False
row3 False True True
crosstab
构造函数
s=pd.DataFrame(list(my_dict.values()),index=my_dict.keys()).stack()
pd.crosstab(s.index.get_level_values(0),s).astype(bool)
Out[131]:
col_0 a b c
row_0
row1 True True False
row2 True False False
row3 False True True