重复实验并将结果存储在数据框中

时间:2019-04-25 12:03:05

标签: pandas

我有一个清单。我可以从此列表中随机抽取一个样本。我可以将函数应用于该示例。我可以改变样品的大小。我可以将每个样本大小的结果存储在新行中。像这样:

import pandas as pd
import random

List = range(1,10)

def fun(Many_Things):
    Items = random. sample(List, Many_Things)
    return sum(Items)

df = pd.DataFrame({'Things' : range(1,5)})

df['Sample'] = df['Things'].apply(lambda x: fun(x))

print(df)

哪个给:

   Things  Sample
0       1       2
1       2      14
2       3      16
3       4      19

当我再次运行它时,我得到:

   Things  Sample
0       1       7
1       2      11
2       3      16
3       4      24

当我再次运行它时,我得到:

   Things  Sample
0       1       3
1       2      16
2       3      19
3       4      23

我想重复多次,每次将结果存储在新列中。

2 个答案:

答案 0 :(得分:2)

您可以创建一个dict comprehension并以**kwarg的身份传递到DataFrame.assign

import pandas as pd
import random

List = range(1,10)
def fun(Many_Things):
    Items = random. sample(List, Many_Things)
    return sum(Items)

df = pd.DataFrame({'Things' : range(1,5)})

d = {f"Sample{i+1}": df.Things.apply(lambda x: fun(x)) for i in range(5)}

df.assign(**d)

[出]

   Things  Sample1  Sample2  Sample3  Sample4  Sample5
0       1        2        9        8        4        4
1       2       12        8       13       15       12
2       3       17       20       20       16       13
3       4       19       26       23       20       16

答案 1 :(得分:2)

尝试:

import random
List = range(1,10)

def fun(Many_Things):
    Items = random. sample(List, Many_Things)
    return sum(Items)

df = pd.DataFrame({'Things' : range(1,5)})

for i in range(5):
    df['Sample'+str(i)]= df['Things'].apply(fun)

print(df)

   Things  Sample0  Sample1  Sample2  Sample3  Sample4
0       1        6        7        4        8        8
1       2       16       12        5       17       15
2       3       16       16       18       14       19
3       4       22       20       21       21       21