我有一个 CSV 文件,其中包含来自偏好实验的评分数据。该文件相当基本,有 5 行,其中我需要 4 行(参与者、图像、流畅度、评级和版本)
我创建了一个数据框来隔离我需要的列,并按流畅度(1 和 4)分割框架,这样我就可以获得每个流畅度的组平均评分。
我无法弄清楚如何分割每个参与者的文件(每个人每个流利程度有 2 个偏好评级)以获得个人评级。
下面是我的代码供引用。
我在编码方面还很陌生,所以这可能不是最有效的方法。
谢谢
import pandas as pd
import numpy as np
# create dataframe from csv file and import only the colums you want
df = pd.read_csv('Pre-experiment.csv', usecols=[0,2,3,4])
pre_fluent = df[df['Fluency']== 1]
pre_disfluent = df[df['Fluency']==4]
pre_version1 = df[df['Version']==1]
pre_version2 = df[df['Version']==2]
print (pre_fluent)
print (pre_disfluent)
pre_mean_fluent = np.mean(pre_fluent)
pre_mean_disfluent = np.mean(pre_disfluent)
print (pre_mean_fluent)
print (pre_mean_disfluent)
df1 = pd.read_csv('Post-experiment.csv', usecols=[0,2,3,4])
#print (df)
post_fluent = df1[df['Fluency']== 1]
post_disfluent = df1[df['Fluency']==4]
post_version1 = df1[df['Version']==1]
post_version2 = df1[df['Version']==2]
print ("Dataframe sortted by fluency: {}".format(post_fluent))
print (post_disfluent)
post_mean_fluent = np.mean(post_fluent)
post_mean_disfluent = np.mean(post_disfluent)
print ("Post_Fluent Mean: {}".format(post_mean_fluent))
print ("Post_Disfluent Mean: {}".format(post_mean_disfluent))
最佳答案
可能的答案
尚不完全清楚您要查找的内容,但如果您需要按参与者
对数据帧进行分组,请尝试使用 df.set_index
将其设置为索引:
df.set_index('Participant', inplace=True)
假设您有参与者 A
和 B
。您可以通过 df.loc
获取参与者 A
的所有 Fluency
值或df.iloc
(用于按位置而不是名称进行引用):
fluency_A = df.loc['A']['Fluency'] # or df.loc['A', 'Fluency']
这可能在一定程度上取决于您的实际数据的格式,但希望它能让您接近您正在寻找的内容。
一个工作示例
# Make up some data that we can read into our dataframe.
data = io.StringIO("""Participant,Fluency,Other
A,1,5
A,2,5
B,3,6
B,4,6""")
# Read the data, set the index, and get Fluency for "A".
df = pd.read_csv(data)
df.set_index('Participant', inplace=True)
df.loc['A']['Fluency']
# Participant
# A 1
# A 2
# Name: Fluency, dtype: int64
编辑:正如评论中提到的,您也可以使用df.loc['A', 'Fluency']
,但我遇到了一些问题当我有一个复杂的多索引时,我自己的工作中就会用到这个。这里使用的格式:df.loc[index_specation][column_specation]
似乎对我来说更一致。
关于python - 按组 Python 拆分 Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058108/