访问Pandas lambda函数中的组

2024-06-16 14:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有多索引的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

谢谢, 丹


Tags: 数据lambda函数childget级别levelparent
1条回答
网友
1楼 · 发布于 2024-06-16 14:35:53

不如,更简单地说:

pvalDf = countsDf4.apply(lambda row: ttest_ind(row[parent], row[child]), axis=1)

我已经在你的笔记本上测试过了。在

您的问题是^{}默认情况下将函数应用于每个,而不是每行。因此,您需要指定axis=1参数来覆盖默认行为并逐行应用函数。在

另外,当您可以通过row[x]为一组列编制索引时,没有理由使用row.groupby(level='Strain').get_group(x)。:)

相关问题 更多 >