使用熊猫在数据框中插入行

时间:2020-07-31 11:17:55

标签: python pandas

我创建了一个静态方法,该方法为参与实验的参与者创建了随机训练协议。该方法有效,但我希望培训日始终以“ 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')

3 个答案:

答案 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