首先,我不得不说我是Python和Pandas的新手,但是我想在以后使用它们更多,因此我正在尝试它。由于我的工作,我经常使用Excel,并且经常遇到数据(行)具有其属性(列)的问题,但有时某些数据(行)可能具有第三维。这是一个简单的Pandas数据框示例,以显示我的意思:
df = pd.DataFrame(data={"obs":[["test1","test2"],"test1"],
"result":[[101,103],200]},index=["subj1","subj2"])
df
obs result
subj1 [test1, test2] [101, 103]
subj2 test1 200
您一般如何处理?我读了“整洁的数据”一词,其中每个值都应获得其自己的单元格。我应该为每个异常主题添加column => obs1,obs2,result1,result2还是添加行,例如:subj1_1,subj1_2,这对于属性(列)保持不变是更有意义的。在这里可以使多索引有意义吗?我读了一些,但是我还不了解如何有效地使用它们。我正在搜索该主题,但没有任何具体帮助。
答案 0 :(得分:1)
在您的示例中,我认为subj不是一个好的索引。我会推荐使用数字增量索引或多索引。将来更容易处理。考虑一个例子:
df = pd.DataFrame(
data={
'subj':["subj1","subj1", "subj1", "subj1", "subj2", "subj2","subj2", "subj2", "subj3", "subj3"] ,
"obs":["test1","test2","test2","test1",'test1','test1','test2','test2','test1','test2'],
"result":[101,103,105,110, 203,159,193,285,400,543]
}
)
df
subj obs result
0 subj1 test1 101
1 subj1 test2 103
2 subj1 test2 105
3 subj1 test1 110
4 subj2 test1 203
5 subj2 test1 159
6 subj2 test2 193
7 subj2 test2 285
8 subj3 test1 400
9 subj3 test2 543
让我们考虑您要为每个唯一主题计算平均值。由于所有数据点都有自己的行,因此可以使用熊猫函数:groupby和mean。
df.groupby('subj').mean()
result
subj
subj1 104.75
subj2 210.00
subj3 471.50
或者如果要计算每个subj和obj的均值
df.groupby(['subj','obs']).mean()
result
subj obs
subj1 test1 105.5
test2 104.0
subj2 test1 181.0
test2 239.0
subj3 test1 400.0
test2 543.0
如果从excel导入数据后在列表中遇到数据点-我将推荐编写一个函数,该函数将使n行从1到1,并apply跨1轴>
希望有帮助!