将字典中的列表添加到DataFrame作为新列

时间:2017-05-24 23:40:39

标签: python pandas dictionary

假设我有以下pandas DataFrame:

df = pd.DataFrame({'x': [0, 1, 2], 'y': [3, 4, 5], 'z': [6, 7, 8]})
     x   y   z
 0   0   3   6
 1   1   4   7
 2   2   5   8

以下词典:

d = {'a': [10, 10, 10], 'b': [100, 100, 100]}

将字典添加到DataFrame以获取以下内容的最佳方法是什么:

     x   y   z    a    b
 0   0   3   6   10  100
 1   1   4   7   10  100
 2   2   5   8   10  100

这是我到目前为止所提出的,但我觉得必须有更好的方法:

df_bigger = pd.concat([df, pd.DataFrame(d)], axis=1)

4 个答案:

答案 0 :(得分:3)

您可以使用join()。正如@piRsquared在评论中提到的那样,传递索引如下。

df = df.join(pd.DataFrame(d, index = df.index))

    x   y   z   a   b
0   0   3   6   10  100
1   1   4   7   10  100
2   2   5   8   10  100

答案 1 :(得分:3)

assign与字典解包

一起使用
df.assign(**d)

    x   y   z   a   b
0   0   3   6   10  100
1   1   4   7   10  100
2   2   5   8   10  100

请注意,只要列表的长度与数据帧一致,使用assign,就会处理索引。

答案 2 :(得分:2)

一种方法是:

dataframe_dict = pd.DataFrame.to_dict(orient='dict')
d = {'a': [10, 10, 10], 'b': [100, 100, 100]}

new_dict = dict(dataframe_dict.items() + d.items())

BTW,我从未使用DataFrame,但是在这里:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_dict.html,它表示你可以将数据帧转换为dict,所以我只是转换它,并创建了一个包含其他项目的新dict。

答案 3 :(得分:0)

#merge existing data with the new dict and re-construct a DF.
pd.DataFrame(dict(df.to_dict(orient='list'),**d))
Out[186]: 
    a    b  x  y  z
0  10  100  0  3  6
1  10  100  1  4  7
2  10  100  2  5  8