我有一个带有多索引的Pandas数据帧。级别0是“应变”,级别1是“JGI库”。每个“应变”都有几个与之关联的“JGI库”列。我想用lambda函数来应用t检验来比较两种不同的菌株。为了解决问题,我使用.iloc[0]命令获取了数据帧的一行。在
row = pvalDf.iloc[0]
parent = 'LL1004'
child = 'LL345'
ttest_ind(row.groupby(level='Strain').get_group(parent), row.groupby(level='Strain').get_group(child))[1]
这和预期的一样。现在我试着把它应用到我的整个数据帧
^{pr2}$现在,我收到一条错误消息:“ValueError:('level name strains不是索引的名称','发生在索引(LL1004,BCHAC)'”
“LL1004”是一种“毒株”,但熊猫似乎没有意识到这一点。可能多重索引没有正确传递给lambda函数?有没有比使用.iloc[0]更好的方法来排除lambda函数的故障?在
我在Github上放了一份Jupyter笔记本和一个带有countsDf4数据框的excel文件https://github.com/danolson1/pandas_ttest
谢谢, 丹
不如,更简单地说:
我已经在你的笔记本上测试过了。在
您的问题是^{} 默认情况下将函数应用于每个列,而不是每行。因此,您需要指定
axis=1
参数来覆盖默认行为并逐行应用函数。在另外,当您可以通过
row[x]
为一组列编制索引时,没有理由使用row.groupby(level='Strain').get_group(x)
。:)相关问题 更多 >
编程相关推荐