我有一个清单。我可以从此列表中随机抽取一个样本。我可以将函数应用于该示例。我可以改变样品的大小。我可以将每个样本大小的结果存储在新行中。像这样:
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
我想重复多次,每次将结果存储在新列中。
答案 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