在Pandas Dataframe单元格中查找[Python列表]的匹配值的总和?

时间:2016-10-31 03:03:04

标签: python function pandas dataframe sum

底线问题:

这很难看,对吗?对于pandas数据帧:

happyBarFrame['Sunday'].apply(lambda x : x == [0]).value_counts()[0]

长版: 我想找到"空"的总和Pandas Dataframe中的值。条目为[0]时为空 - 列表。

我想最好的解决方案是不要将list [0]用作数据帧单元格中的值。假设我坚持这一点,我想了解为什么这么多功能不起作用,给出一个不可靠的列表"错误?

是的,这是数据科学课的家庭作业。我们刮了一个显示酒吧和欢乐时光的网页。我已经建立了这个数据框,我正在使用小时列表,其中列表中的最后一个条目是欢乐时光结束时。忽略数据中的几个错误: DataFrame of happy hours by day of week

我开始相信在数据框中存储列表并不是最好的主意,因为我希望工作的许多函数告诉我它们不能作为列表进行哈希:

In [173]: happyBarFrame['Sunday'].value_counts()

...跳过长错误...

TypeError: unhashable type: 'list'

问题是:我已经尝试了以下许多其他事情。什么是按日计算单元格的最佳方法,其中列表中包含单个0(单元格值= [0])?

happyBarFrame[happyBarFrame['Sunday'].isin([[0]])] - 不起作用 happyBarFrame[happyBarFrame['Sunday'].isin([0])] - 没有工作

两者都给TypeError: unhashable type: 'list'

happyBarFrame['Sunday'].apply(lambda x : x == [0]).value_counts()[0]

工作但感觉不对!我可以迭代一周的日子,按天计算,然后构建我需要构建的直方图。但是必须有一个更好的方法,这看起来真的很低效,是真的吗?

编辑:修正了一个错误,需要在value_counts [0]中计算True,而不是False

1 个答案:

答案 0 :(得分:1)

如果您只想将函数应用于数据框中的每个单元格,则可以使用applymap;然后获取列总和,只需调用sum

df = pd.DataFrame({"Sunday": [[0],[0,1]], "Monday": [[0],[0]]})
df.applymap(lambda x: x == [0]).sum()

Monday    2
Sunday    1
dtype: int64