使用现有variab向数据帧添加新列

2024-09-28 17:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在现有的数据帧中创建一个新变量(列)。你知道吗

Participant   Session   Trial_number    Accuracy    Block
 G01S01          1             3             1          1
 G01S02          1             4             1          2
 G02S01          1             5             1          5
 G01S01          1             6             1          8
 G01S01          1             7             1          10

基本上,我想基于Block列创建一个新变量“Epoch”。1-4之间的块值属于Epoch 1、Epoch 2和其他四个值,依此类推。它看起来像这样:

Participant   Session   Trial_number    Accuracy    Block    Epoch
 G01S01          1             3             1          1          1
 G01S02          1             4             1          2          1
 G02S01          1             5             1          5          2
 G01S01          1             6             1          8          2
 G01S01          1             7             1          10         3

另外,我还想基于Participant ID创建另一个变量,如果它以1结尾,那么Participant属于组1,如果它以2结尾,那么Participant属于组2。你知道吗


我试着做第一道题,但基本上不起作用。你知道吗

import pandas as pd

df = pd.read_csv('merge.csv')

Epoch = []

x = 0

while x < 179424:
    if df['Block'][x] < 5:
        Epoch == 1
    elif 4 < df['Block'][x] < 9:
        Epoch == 2
    elif 8 < df['Block'][x] < 13:
        Epoch == 3
    elif 12 < df['Block'][x] < 17:
        Epoch == 4
    else:
        Epoch == 5
    x += 1

(179424是我的电子表格中的行数)


Tags: csvnumberdfsession结尾blockpdelif
3条回答

我想,您应该使用数据帧的apply方法。该方法将函数作为参数,并将该函数应用于数据帧的每一行(或每一列,具体取决于axis的值)。从您的代码示例中,我怀疑这将是一个有意义的函数:

def derive_epoch(row):
    if row['Block'] < 5:
        return 1
    elif row['Block'] < 9:
        return 2
    elif row['Block'] < 13:
        return 3
    elif row['Block'] < 17:
        return 4
    else:
        return 5

然后,我就这样应用它:

df['Epoch'] = df.apply(derive_epoch, axis=1)

我希望这有帮助!]你知道吗

可以使用//提取epoch编号,并使用apply提取“Block”列:

df['Epoch'] = df.apply(lambda x : x['Block']//4 +1)

您可以为此使用^{}来创建箱子并基于这些箱子分配标签:

df['Epoch'] = pd.cut(df['Block'], 
                     [1,4,8,12], 
                     labels=[1,2,3],
                     include_lowest=True)

print(df)
  Participant  Session  Trial_number  Accuracy  Block Epoch
0      G01S01        1             3         1      1     1
1      G01S02        1             4         1      2     1
2      G02S01        1             5         1      5     2
3      G01S01        1             6         1      8     2
4      G01S01        1             7         1     10     3

相关问题 更多 >