Python 序列的真值是模糊的。。。从bioinfokit.analys运行tuckey_hsd时出错

Python 序列的真值是模糊的。。。从bioinfokit.analys运行tuckey_hsd时出错,python,pandas,Python,Pandas,我在尝试运行下面的代码时遇到此错误。我读了整个线程,但我仍然不知所措,不知道错误是从哪里来的 数据帧 element id id_2 group condition level vol size height 0 C11 28 CTL11 cont control l1 18687.3750 0.190136 0.682789 1 C11 28 CTL11 cont control l2 16797.3750 0.1

我在尝试运行下面的代码时遇到此错误。我读了整个线程,但我仍然不知所措,不知道错误是从哪里来的

数据帧

    element id  id_2    group   condition   level   vol size    height
0   C11 28  CTL11   cont    control l1  18687.3750  0.190136    0.682789
1   C11 28  CTL11   cont    control l2  16797.3750  0.181322    0.829770
2   C11 28  CTL11   cont    control l3  24813.0000  0.204907    0.812723
3   C12 29  CTL12   cont    control l1  20069.4375  0.174686    0.719480
4   C12 29  CTL12   cont    control l2  17323.8750  0.149539    0.836107
代码:

基于
级别
列(l1、l2和l3)旋转后,我根据特定列之间的划分创建新列(例如
vol
size

代码一直运行到
res=stat()
行(包括该行),并且仅在运行
res.tukey\hsd
行时给出错误。我认为这个错误可能与分区操作有关,但我不确定如何克服这个问题

任何想法都欢迎

编辑:完全错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-f9bb6e4e7e5a> in <module>
     42 res = stat()
     43 res.tukey_hsd(df=rt, res_var='l1l3_size', xfac_var='group', 
---> 44               anova_model=design)
     45 # print stats outputs
     46 print(anova_table)

/opt/anaconda3/envs/icvs/lib/python3.7/site-packages/bioinfokit/analys.py in tukey_hsd(self, df, res_var, xfac_var, anova_model, phalpha, ss_typ)
    797         comp_pairs = [(ele1, ele2) for i, ele1 in enumerate(list(mult_group)) for ele2 in list(mult_group)[i + 1:]]
    798         for p in comp_pairs:
--> 799             mean_diff = max(mult_group[p[0]], mult_group[p[1]]) - min(mult_group[p[0]], mult_group[p[1]])
    800             # count for groups; this is useful when sample size not equal -- Tukey-Kramer
    801             group1_count, group2_count = mult_group_count[p[0]], mult_group_count[p[1]]

/opt/anaconda3/envs/icvs/lib/python3.7/site-packages/pandas/core/generic.py in __nonzero__(self)
   1441     def __nonzero__(self):
   1442         raise ValueError(
-> 1443             f"The truth value of a {type(self).__name__} is ambiguous. "
   1444             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1445         )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
42 res=stat()
43 res.tukey_hsd(df=rt,res_var='l1l3_size',xfac_var='group',
--->44方差分析(模型=设计)
45#打印统计数据输出
46打印(方差分析表)
/tukey_hsd中的opt/anaconda3/envs/icvs/lib/python3.7/site-packages/bioinfookit/analys.py(self、df、res_var、xfac_var、方差分析模型、phalpha、ss_typ)
797 comp_pairs=[(ele1,ele2)表示枚举中的i,ele1(列表(mult_组)),表示列表中的ele2(mult_组)[i+1:]
798对于成对的p:
-->799平均差异=最大值(多组[p[0]],多组[p[1]])-min(多组[p[0]],多组[p[1]])
800#分组计算;这在样本大小不相等时非常有用——Tukey Kramer
801组1计数,组2计数=多组计数[p[0]],多组计数[p[1]]
/opt/anaconda3/envs/icvs/lib/python3.7/site-packages/pandas/core/generic.py in\uuuuuuuuu nonzero\uuuuuuu(self)
1441定义非零(自):
1442升值错误(
->1443F“一个{type(self).{name}的真值是不明确的。”
1444“使用a.empty、a.bool()、a.item()、a.any()或a.all()
1445         )
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

问题是您正在将
pandas.core.series.series
对象传递给
max()
,请参见下文

In [1]: import pandas as pd                                                                       

In [2]: max(pd.Series([1,2,3]), pd.Series([3,5,7]))                                               
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-d0510caa4f61> in <module>
----> 1 max(pd.Series([1,2,3]), pd.Series([3,5,7]))

/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/generic.py in __nonzero__(self)
   1476 
   1477     def __nonzero__(self):
-> 1478         raise ValueError(
   1479             f"The truth value of a {type(self).__name__} is ambiguous. "
   1480             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
[1]中的
:将熊猫作为pd导入
在[2]中:最大值(pd系列([1,2,3]),pd系列([3,5,7]))
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
---->最大值为1(局部放电系列([1,2,3]),局部放电系列([3,5,7]))
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/generic.py in\uuuuuuuuuuuu非零(self)
1476
1477定义非零(自):
->1478升值错误(
1479F“一个{type(self)。{name}的真值是不明确的。”
1480“使用a.empty、a.bool()、a.item()、a.any()或a.all()
ValueError:序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()。

在第799行中,您将
mult\u group[p[0]]
传递到
max()
,它来自
mult\u group,mult\u group\u count,sample\u size\u r=analysis\u general.从df(df,xfac\u var,res\u var,'get\u dict')获取列表
其中
df
是您的
rt
数据帧。请从中签出,您可以确定您的
rt
是否符合预期。

问题在于数据透视操作后列的分层索引。数据透视后:

     element id  id_2  group  condition   vol       size      height
level                                     l1 l2 l3  l1 l2 l3  l1 l2 l3
.....
扁平化索引解决了这个问题

结果数据帧:

 element id  id_2  group  condition   vol l1   vol l2   vol l3   size l1   size l2   etc.

您可以发布数据帧的片段吗?作为旁白,
rations=df1
不会复制原始数据帧。@BLimitless刚刚添加了数据帧的片段data@HenryEcker谢谢!我一直以为它会复制df,但显然你需要使用:new_df=df.copy()格式已关闭。谢谢你的帮助!
     element id  id_2  group  condition   vol       size      height
level                                     l1 l2 l3  l1 l2 l3  l1 l2 l3
.....
rt.columns = [' '.join(col).strip() for col in rt.columns.values]
 element id  id_2  group  condition   vol l1   vol l2   vol l3   size l1   size l2   etc.