我正致力于构建一个计算d'统计信息,使用CSV文件中的数据,但需要操纵CSV中的数据,以便d'可以计算。 我的问题:我需要使用哪些代码来转换从csv创建的数据框中的数据。
我需要知道有多少项适用于四种类别之一,包括命中,未命中,误报或正确拒绝,其中每个类别都由刺激和检测定义,以便
我正在使用的数据以CSV格式显示,其中列出了一列中刺激和检测发生的顺序,一旦声明刺激,它就会应用于其后的检测直到新的刺激叫做。它看起来像这样:
Identifier
0 1
1 3
2 4
3 3
4 2
5 4
6 3
7 3
我想要一个如下所示的数据框:
Stim Detect
0 1 3
1 1 4
2 1 3
3 2 4
4 2 3
5 2 3
环顾四周,向我认识的几个熟悉python的人,我被指示使用pandas来操纵数据。有数据读数,它输出到分类器值,可以告诉我数据框中的某些行是命中,未命中,误报或正确拒绝,但我没有上述数据框,做我想要的。我的代码如下。
import pandas as pd
df = pd.read_csv('file1.csv')
def stim(row):
if row['Identifier'] == 1:
return 1
elif row['Identifier'] == 2:
return 2
def detect(row):
if row['Identifier'] == 3:
return 3
elif row['Identifier'] == 4:
return 4
def classifier(row):
return row['Stim']+row['Detect']
df['Stim'] = df.apply(stim,axis=1)
df['Detect'] = df.apply(detect,axis=1)
df['Classifier'] = df.apply(classifier,axis=1)
我得到的数据框是:
Identifier Stim Detect Classifier
0 1 1 NaN NaN
1 3 NaN 3 NaN
2 4 NaN 4 NaN
3 3 NaN 3 NaN
4 2 2 NaN NaN
5 4 NaN 4 NaN
我想要的数据框如下所示:
Identifier Stim Detect Classifier
0 1 1 NaN NaN
1 3 1 3 4
2 4 1 4 5
3 3 1 3 4
4 2 2 NaN NaN
5 4 2 4 6
答案 0 :(得分:0)
您可以尝试loc
来识别列Stim
和Detect
以及fillna
中的值,以填充Stim
列中的缺失值:
print df
Identifier
0 1
1 3
2 4
3 3
4 2
5 4
6 3
7 3
df.loc[df['Identifier'] == 1, 'Stim'] = 1
df.loc[df['Identifier'] == 2, 'Stim'] = 2
df.loc[df['Identifier'] == 3, 'Detect'] = 3
df.loc[df['Identifier'] == 4, 'Detect'] = 4
#fill NaN by method ffill (propagate last valid observation forward to next valid)
df['Stim'] = df['Stim'].fillna(method='ffill')
df['Classifier'] = df['Stim'] + df['Detect']
print df
Identifier Stim Detect Classifier
0 1 1 NaN NaN
1 3 1 3 4
2 4 1 4 5
3 3 1 3 4
4 2 2 NaN NaN
5 4 2 4 6
6 3 2 3 5
7 3 2 3 5