在Python中将字典转换为Pandas

时间:2017-11-24 03:57:48

标签: python pandas dictionary dataframe

我有一个字典如下:

data_dict = {'1.160.139.117': ['712907','742068'],
 '1.161.135.205': ['667386','742068'],
 '1.162.51.21': ['326136', '663056', '742068']}

我想将dict转换为数据帧:

df= pd.DataFrame.from_dict(data_dict, orient='index')

enter image description here

如何创建一个数据框,其中包含表示字典值的列和表示字典键的行?,如下所示: enter image description here

1 个答案:

答案 0 :(得分:3)

最好的选择是#4

pd.get_dummies(df.stack()).sum(level=0)

选项1:

你可以采取一种方式:

df.stack().reset_index(level=1)\
  .set_index(0,append=True)['level_1']\
  .unstack().notnull().mul(1)

输出:

               326136  663056  667386  712907  742068
1.160.139.117       0       0       0       1       1
1.161.135.205       0       0       1       0       1
1.162.51.21         1       1       0       0       1

选项2

或者使用litte重塑和pd.crosstab:

df2 = df.stack().reset_index(name='Values')
pd.crosstab(df2.level_0,df2.Values)

输出:

Values         326136  663056  667386  712907  742068
level_0                                              
1.160.139.117       0       0       0       1       1
1.161.135.205       0       0       1       0       1
1.162.51.21         1       1       0       0       1

选项3

df.stack().reset_index(name="Values")\
  .pivot(index='level_0',columns='Values')['level_1']\
  .notnull().astype(int)

输出:

Values         326136  663056  667386  712907  742068
level_0                                              
1.160.139.117       0       0       0       1       1
1.161.135.205       0       0       1       0       1
1.162.51.21         1       1       0       0       1

选项4(@Wen指出了一个简短的解决方案,目前为止最快)

pd.get_dummies(df.stack()).sum(level=0)

输出:

               326136  663056  667386  712907  742068
1.160.139.117       0       0       0       1       1
1.161.135.205       0       0       1       0       1
1.162.51.21         1       1       0       0       1