当前位置: 首页 > 面试题库 >

Python-通过熊猫DataFrame分组并选择最常用的值

南门野
2023-03-14
问题内容

我有一个包含三个字符串列的数据框。我知道第三列中的唯一一个值对于前两个的每种组合都有效。为了清理数据,我必须按前两列按数据帧分组,并为每种组合选择第三列的最常用值。

我的代码:

import pandas as pd
from scipy import stats

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
                  'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
                  'Short name' : ['NY','New','Spb','NY']})

print source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])

最后一行代码不起作用,它显示“ Key error’Short name’”,如果我尝试仅按城市分组,则会收到AssertionError。我该如何解决?


问题答案:

你可以value_counts()用来获取计数系列,并获取第一行:

import pandas as pd

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
                  'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
                  'Short name' : ['NY','New','Spb','NY']})

source.groupby(['Country','City']).agg(lambda x:x.value_counts().index[0])


 类似资料:
  • 我有一个包含三列字符串的数据框。我知道第三列中只有一个值对前两列的每个组合都有效。要清理数据,我必须按数据帧按前两列进行分组,并为每个组合选择第三列的最常用值。 我的代码: 最后一行代码不起作用,它说“关键错误‘简称’”,如果我试图只按城市分组,那么我得到了一个断言错误。我能做什么来修复它?

  • 问题内容: 在Pandas中,当我选择一个索引中只有一个条目的标签时,我会得到一个“序列”,但是当我选择一个具有多于一个条目的标签时,我就会得到一个数据框。 这是为什么?有没有办法确保我总是取回数据帧? 问题答案: 可以肯定的是,这种行为是不一致的,但是我认为很容易想到这种情况很方便。无论如何,要每次获取一个DataFrame,只需将一个列表传递给即可。还有其他方法,但我认为这是最干净的方法。

  • 问题内容: 我曾经在之后进行并行化,例如: 但是,有没有人想出如何并行化返回DataFrame的函数?如预期,此代码对于失败。 问题答案: 尽管确实应该将其内置到熊猫中,但这似乎可行

  • 当工作与熊猫Dataframe对象和使用条件选择从DataFrame它给出了一个错误如下,而我看到通过一些视频在木星笔记本上相同的作品。 然而,它清楚地说明了下面的错误,但我没有找到解决方法,即使我在各种SO帖子上搜索过,但没有得到相同的错误解决方案 TypeError:' 下面是我在puthon3.6中使用的代码内容。 任何帮助或方向都非常感谢,而我仍然在寻找自己。

  • 问题内容: 我有一个从csv文件构建的pandas中的数据框。数据框有几列,并由其中一列进行索引(这是唯一的,因为每一行都有用于该索引的该列的唯一值。) 如何基于应用于多个列的“复杂”过滤器选择数据框的行?我可以轻松地从列中大于10的数据框中选择切片,例如: 但是,如果我想要的东西就像一个过滤器:选择的切片,其中 任何 列都大于10? 或者,如果for的值大于10但值小于5? 这些如何在熊猫中实现

  • 我有一个带有数组列的数据帧: 我读了这个CSV,并将“类”列的值转换成数组: 现在我想选择“类”值中具有“performer_0”的行。像这样: 但是这个代码不起作用: 回溯(最后一次调用):文件“d:\pyenv\pandas\lib\site packages\pandas\core\indexes\base.py”,第2657行,在get_loc return self.\u engine.