Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多列中的相同字符串值计算dataframe中的总行数_Python_Pandas - Fatal编程技术网

Python 使用多列中的相同字符串值计算dataframe中的总行数

Python 使用多列中的相同字符串值计算dataframe中的总行数,python,pandas,Python,Pandas,非常感谢你的帮助 问题:如何计算多列中包含“9999不知道”的行数 我已经找到了让我半途而废的解决方案。例如,我发现了许多示例,其中可以使用列的名称来获取具有特定条件的行数。但是,我有76列,每列代表调查中的不同问题,因此有不同的标签,因此效率很低 下面是一个示例df。同样,请记住我有76列,因此使用列的名称是不可行的 pd.DataFrame.from_items([('RespondentId', ['1ghi3g','335hduu','4vlsiu4','5nnvkkt','634ded

非常感谢你的帮助

问题:如何计算多列中包含“9999不知道”的行数

我已经找到了让我半途而废的解决方案。例如,我发现了许多示例,其中可以使用列的名称来获取具有特定条件的行数。但是,我有76列,每列代表调查中的不同问题,因此有不同的标签,因此效率很低

下面是一个示例df。同样,请记住我有76列,因此使用列的名称是不可行的

pd.DataFrame.from_items([('RespondentId', ['1ghi3g','335hduu','4vlsiu4','5nnvkkt','634deds','7kjng']), ('Satisfaction - Timing', ['9-Excellent','9-Excellent','9999-Don\'t Know','8-Very Good','1-Very Unsatisfied','9999-Don\'t Know']),('Response Speed - Time',['9999-Don\'t Know','9999-Don\'t Know','9-Excellent','9-Excellent','9-Excellent','9-Excellent'])])

如您所见,总共有4行显示“9999不知道”,因此我希望获得4个输出。

这将为您提供每列9999不知道的行数

df.astype(object).eq("9999-Don't Know").sum()
这将给你总数9999不知道,谢谢@Mitch

df.astype(object).eq("9999-Don't Know").values.sum()
这将为您提供至少包含一行的总行数

df.astype(object).eq("9999-Don't Know").any(1).sum()

这将为您提供每列9999行的未知行数

df.astype(object).eq("9999-Don't Know").sum()
这将给你总数9999不知道,谢谢@Mitch

df.astype(object).eq("9999-Don't Know").values.sum()
这将为您提供至少包含一行的总行数

df.astype(object).eq("9999-Don't Know").any(1).sum()

您还可以使用以下选项:

df.stack().str.contains("9999-Don't Know").sum()
尽管这比@piRSquared解决方案慢:

In [38]: timeit df.astype(str).eq("9999-Don't Know").values.sum() 
1000 loops, best of 3: 182 us per loop

In [39]: timeit df.stack().str.contains("9999-Don't Know").sum()
1000 loops, best of 3: 467 us per loop

您还可以使用以下选项:

df.stack().str.contains("9999-Don't Know").sum()
尽管这比@piRSquared解决方案慢:

In [38]: timeit df.astype(str).eq("9999-Don't Know").values.sum() 
1000 loops, best of 3: 182 us per loop

In [39]: timeit df.stack().str.contains("9999-Don't Know").sum()
1000 loops, best of 3: 467 us per loop
另一个解决办法是:

df.eq("9999-Don't Know").sum().sum()
您还提到了类型错误:

TypeError: Could not compare ["9999-Don't Know"] with block values. 
这意味着您有一个类似于DataFrame元素的列表。可以使用以下代码将其转换为字符串:

 df = df.applymap(lambda x: x[0] if type(x) == list else x) 
另一个解决办法是:

df.eq("9999-Don't Know").sum().sum()
您还提到了类型错误:

TypeError: Could not compare ["9999-Don't Know"] with block values. 
这意味着您有一个类似于DataFrame元素的列表。可以使用以下代码将其转换为字符串:

 df = df.applymap(lambda x: x[0] if type(x) == list else x) 


可能需要.values.sum?或df.eq9999不知道.sum.sum-double sumI尝试了您的解决方案,但收到类型错误:无法将[9999不知道]与块值进行比较。这是否意味着此Excel文件中某些单元格的格式不一致@米奇。我也收到了与您的解决方案相同的消息。@AlexeyTrofimov我尝试了您的解决方案,也收到了相同的消息。看起来您的数据帧中的值不是字符串而是列表。首先尝试此方法检查它是否有效:df=df.applymaplambda x:x[0]如果typex==list else xMight want.values.sum?或df.eq9999 Don Know.sum.sum-double sumI尝试了您的解决方案,但收到类型错误:无法将[9999 Don Know]与块值进行比较。这是否意味着此Excel文件中某些单元格的格式不一致@米奇。我也收到了与您的解决方案相同的消息。@AlexeyTrofimov我尝试了您的解决方案,也收到了相同的消息。看起来您的数据帧中的值不是字符串而是列表。首先尝试一下,检查它是否可以工作:df=df.applymaplambda x:x[0]如果typex==list else x,则检查它是否可以工作!这正是我要找的。@techscolasticus不客气。但是我建议您接受另一种解决方案,因为它更快。我会的,但是它给了我一个错误,所以我无法获得总行数。非常感谢!这正是我要找的。@techscolasticus不客气。但是我建议您接受另一种解决方案,因为它更快..我会的,但是它给了我一个错误,所以我无法获得总行数。因此df=df.applymap。。。确实有效,但我不确定在这之后我应该做些什么来获得rowsAfter的总数,您可以使用此处提出的任何解决方案。例如,df.eq9999不知道.sum.sumso df=df.applymap。。。确实有效,但我不确定在这之后我应该做些什么来获得rowsAfter的总数,您可以使用此处提出的任何解决方案。例如df.eq9999不知道.sum.sum