python - python - 使用现有变量向dataframe添加新列

我正在尝试在现有的dataframe中创建一个新的变量(列)。

 

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



基本上,我想创建一个基于块列的新变量"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



此外,我还想基于参与者ID创建另一个变量,如果它以1结尾,参与者属于组1,如果它以2结尾,则参与者属于组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是电子表格中的行数 )

时间:

您可以使用pandas.cut来制作垃圾箱,并且根据这些垃圾箱分配标签:

 

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



我想,你想使用数据框架的apply方法,方法将函数作为参数,并将该函数应用于dataframe(或每个列,取决于 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编号,并应用于'Block '列:

 

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



另一个非常简单的解决方案:

 

#Import pandas 


import pandas as pd



# Read csv file


df = pd.read_csv('merge.csv', sep=';')



# Add epoch column


df['Epoch'] = df['Block']//4 + 1


# Add group column


df['Group'] = df['Participant'].str[-1]



print(df)



...