在数据框中将字典添加为新行

时间:2018-08-22 19:58:49

标签: python python-3.x pandas dictionary dataframe

我有一个返回键和结果字典的函数。

我想创建一个循环遍历不同值的新函数。每个值都会产生一个新的字典,其结果不同,但键相同。

我想让此函数创建一个数据框,并在每次循环迭代时,将索引(或第一列)设置为循环的i值,并将该行作为结果字典。

字典看起来像{key1: 46, key2:100,key3:200}

start = 10
stop = 100
step = 10

最终结果将类似于:

    key1  key2  key3
10   46   100    200
20   50    75     60
30   80     2     10
40   100    50     6
50   10     8      33
etc...

3 个答案:

答案 0 :(得分:4)

创建一个值的嵌套字典,然后该函数返回该字典,然后在最后使用DataFrame构造函数from_dictorient='index'

import pandas as pd
import numpy as np
np.random.seed(123)

start = 10
stop = 100
step = 10

d2 = {}
while start <= stop:
    # Simulating your function that returns a dictionary:
    d = {'key1': np.random.randint(1,100), 
         'key2': np.random.randint(1,10), 
         'key3': np.random.randint(20,70)}
    # Add that dictionary to a dictionary
    d2[start] = d
    start+=step

pd.DataFrame.from_dict(d2, orient='index')

输出:

     key1  key2  key3
10     67     3    58
20     18     4    62
30     58     7    53
40     97     2    67
50     74     1    66
60     97     4    34
70     37     1    36
80     69     2    23
90      3     5    59
100    67     5    67

答案 1 :(得分:0)

尝试此功能:

import pandas as pd
import random

d = {'key1': 46, 'key2':100,'key3':200}

def function(d):
    df = pd.DataFrame(index=d.keys())
    for i in range(10,110,10):
        if i==10: df[i]=d.values() # if you want the original values to be placed first
        else:
            df[i] = [random.randint(1,101) for i in range(0,len(d.keys()))]
    return df.T

function(d)

这将获得您想要的输出:

输出:

     key1  key2  key3
10     46   100   200
20     17    82    50
30     53    34    49
40     25    97    39
50     91    37    73
60     62    48    20
70     50    65    77
80      2    44    28
90     47    92    61
100    16    13    18

答案 2 :(得分:0)

不完全确定从值列表中选择对象的规则。所以我在这里做了一个随机选择。但是想法应该是相似的:

value_list = np.random.rand(1000).tolist()
df = pd.DataFrame()
for i in range(10, 101, 10):
    a, b, c = random.sample(value_list, 3)
    df.loc[i, 'key1'] = a
    df.loc[i, 'key2'] = b
    df.loc[i, 'key3'] = c