我创建了一个静态方法,该方法为参与实验的参与者创建了随机训练协议。该方法有效,但我希望培训日始终以“ STRAIGHT-GLIDING”开始。在Pandas中,有什么简单的方法可以做到这一点吗?
我尝试使用.loc,但事实证明,这会覆盖现有值,而这不是我想要的。
谢谢 基督徒
@staticmethod
def allokeringRandom(printToCSV=False):
dn = []
for i in range(1, 4):
df = pd.DataFrame()
loype = ['STRAIGHT-GLIDING','STRAIGHT-GLIDING','LØYPE 1', 'LØYPE 1', 'LØYPE 1', 'LØYPE 2', 'LØYPE 2', 'LØYPE 2', 'LØYPE 3', 'LØYPE 3', 'LØYPE 3']
dn.append(random.sample(loype, len(loype)))
df = pd.DataFrame(dn).transpose()
df = df.rename(columns={0: "Treningsdag 1", 1: "Treningsdag 2", 2: "Treningsdag 3"})
if printToCSV == True:
df.to_csv('test3.csv')
答案 0 :(得分:1)
您可以在df.transpose()
调用之后简单地覆盖DataFrame的第一行。
df.iloc[0] = ['STRAIGHT-GLIDING','STRAIGHT-GLIDING','STRAIGHT-GLIDING']
但是,我建议您使用一种完全不同的方式来构建DataFrame。以字典开头,并向其中添加随机值,然后将其转换为DataFrame。我发现这种实现方式更易于阅读。
loype = ['STRAIGHT-GLIDING','LØYPE 1', 'LØYPE 2', 'LØYPE 3']
#start with 'STRAIGHT-GLIDING' for each training day
d = {
"Treningsdag 1":['STRAIGHT-GLIDING'],
"Treningsdag 2":['STRAIGHT-GLIDING'],
"Treningsdag 3":['STRAIGHT-GLIDING'],
}
#add random exercises
for n in range(10):
for k in d:
d[k].append(*random.sample(loype, 1))
#make a DataFrame
df = pd.DataFrame(d)
print(df)
Treningsdag 1 Treningsdag 2 Treningsdag 3
0 STRAIGHT-GLIDING STRAIGHT-GLIDING STRAIGHT-GLIDING
1 LØYPE 3 LØYPE 2 LØYPE 2
2 LØYPE 3 STRAIGHT-GLIDING LØYPE 3
3 LØYPE 2 STRAIGHT-GLIDING STRAIGHT-GLIDING
4 LØYPE 2 STRAIGHT-GLIDING LØYPE 3
5 LØYPE 3 LØYPE 3 LØYPE 3
6 LØYPE 2 LØYPE 3 LØYPE 2
7 LØYPE 3 LØYPE 3 LØYPE 3
8 LØYPE 2 STRAIGHT-GLIDING LØYPE 2
9 LØYPE 3 LØYPE 1 LØYPE 2
10 LØYPE 2 LØYPE 1 LØYPE 1
集成了最新OP的评论中的规范:
exercises = ['STRAIGHT-GLIDING','LØYPE 1', 'LØYPE 2', 'LØYPE 3']
max_reps = 3
training_days = ["Treningsdag 1","Treningsdag 2","Treningsdag 3"]
exercises_per_day = 12
loype = exercises * max_reps #list with all exercises, starting with 'STRAIGHT-GLIDING'
d = {}
for day in training_days:
start, end = loype[0], loype[1: exercises_per_day]
random.shuffle(end) #starts with the same exercise, shuffle the others
d[day] = [start, *end]
df = pd.DataFrame(d)
print(df)
Treningsdag 1 Treningsdag 2 Treningsdag 3
0 STRAIGHT-GLIDING STRAIGHT-GLIDING STRAIGHT-GLIDING
1 LØYPE 1 STRAIGHT-GLIDING STRAIGHT-GLIDING
2 LØYPE 3 LØYPE 3 LØYPE 1
3 STRAIGHT-GLIDING LØYPE 3 LØYPE 3
4 LØYPE 3 LØYPE 2 LØYPE 2
5 LØYPE 2 LØYPE 2 LØYPE 1
6 STRAIGHT-GLIDING LØYPE 2 LØYPE 2
7 LØYPE 2 STRAIGHT-GLIDING LØYPE 2
8 LØYPE 1 LØYPE 1 STRAIGHT-GLIDING
9 LØYPE 1 LØYPE 3 LØYPE 1
10 LØYPE 2 LØYPE 1 LØYPE 3
11 LØYPE 3 LØYPE 1 LØYPE 3
答案 1 :(得分:1)
如果要在开始时使用它,则应先手动添加它
typedef struct node_t {
int value;
struct node_t *next;
} node_t;
顺便说一句:如果您希望所有元素都按随机顺序排列,那么可以使用随机播放
loype = ['LØYPE 1', 'LØYPE 1', 'LØYPE 1', 'LØYPE 2', 'LØYPE 2', 'LØYPE 2', 'LØYPE 3', 'LØYPE 3', 'LØYPE 3']
dn.append(['STRAIGHT-GLIDING','STRAIGHT-GLIDING'] + random.sample(loype, len(loype)))
最小工作代码
loype = ['LØYPE 1', 'LØYPE 1', 'LØYPE 1', 'LØYPE 2', 'LØYPE 2', 'LØYPE 2', 'LØYPE 3', 'LØYPE 3', 'LØYPE 3']
random.shuffle(loype)
dn.append(['STRAIGHT-GLIDING','STRAIGHT-GLIDING'] + loype)
结果
import pandas as pd
import random
dn = []
loype = ['LØYPE 1', 'LØYPE 1', 'LØYPE 1', 'LØYPE 2', 'LØYPE 2', 'LØYPE 2', 'LØYPE 3', 'LØYPE 3', 'LØYPE 3']
for _ in range(3):
random.shuffle(loype)
dn.append(['STRAIGHT-GLIDING','STRAIGHT-GLIDING'] + loype)
df = pd.DataFrame(dn).transpose()
df = df.rename(columns={0: "Treningsdag 1", 1: "Treningsdag 2", 2: "Treningsdag 3"})
print(df)
答案 2 :(得分:0)
将系列通过apply()
,该系列将sorted
与自定义键一起使用
import random
dn = []
for i in range(1, 4):
df = pd.DataFrame()
loype = ['STRAIGHT-GLIDING','STRAIGHT-GLIDING','LØYPE 1', 'LØYPE 1', 'LØYPE 1', 'LØYPE 2', 'LØYPE 2', 'LØYPE 2', 'LØYPE 3', 'LØYPE 3', 'LØYPE 3']
dn.append(random.sample(loype, len(loype)))
df = pd.DataFrame(dn).transpose()
df = df.rename(columns={0: "Treningsdag 1", 1: "Treningsdag 2", 2: "Treningsdag 3"})
df = df.apply(lambda s: sorted(s,key=lambda x: "A" if x=="STRAIGHT-GLIDING" else x))
print(df.to_string(index=False))
输出
Treningsdag 1 Treningsdag 2 Treningsdag 3
STRAIGHT-GLIDING STRAIGHT-GLIDING STRAIGHT-GLIDING
STRAIGHT-GLIDING STRAIGHT-GLIDING STRAIGHT-GLIDING
LØYPE 1 LØYPE 1 LØYPE 1
LØYPE 1 LØYPE 1 LØYPE 1
LØYPE 1 LØYPE 1 LØYPE 1
LØYPE 2 LØYPE 2 LØYPE 2
LØYPE 2 LØYPE 2 LØYPE 2
LØYPE 2 LØYPE 2 LØYPE 2
LØYPE 3 LØYPE 3 LØYPE 3
LØYPE 3 LØYPE 3 LØYPE 3
LØYPE 3 LØYPE 3 LØYPE 3