【问题标题】:Get pandas groupby object to ignore missing dataframes获取 pandas groupby 对象以忽略丢失的数据帧
【发布时间】:2017-05-31 09:55:39
【问题描述】:

我正在使用 pandas 读取 excel 文件并将电子表格转换为数据框。然后我应用 groupby 并使用 get_group 将各个组存储在变量中以供以后计算。 我的问题是输入文件的大小并不总是相同,有时 groupby 会产生 10 个 dfs,有时会产生 25 个等。如果初始数据中缺少 df,我如何让我的程序忽略?

df = pd.read_excel(filepath, 0, skiprows=3, parse_cols='A,B,C,E,F,G',
                   names=['Result', 'Trial', 'Well', 'Distance', 'Speed', 'Time'])
df = df.replace({'-': 0}, regex=True) #replaces '-' values with 0
df = df['Trial'].unique()
gb = df.groupby('Trial') #groups by column Trial

trial_1 = gb.get_group('Trial     1')
trial_2 = gb.get_group('Trial     2')
trial_3 = gb.get_group('Trial     3')
trial_4 = gb.get_group('Trial     4')
trial_5 = gb.get_group('Trial     5')

假设我的初始数据只有 3 次试验,我如何让它在以后忽略 4、5 次试验?我的代码在所有试验都存在时运行,但在缺少一些试验时失败:(听起来很像需要一个 if 语句,但我疲惫的大脑不知道在哪里......

提前致谢!

【问题讨论】:

  • gb.groups 将返回组名和标签的字典:pandas.pydata.org/pandas-docs/stable/generated/…,因此您可以使用这些来获取组
  • 抱歉这个愚蠢的问题,但这对我有什么帮助?
  • 因为你得到了组的字典,所以你不需要硬编码代码中的组数
  • 你看到我的回答了吗?你得到一个组名和级别的字典,然后你使用组名并将它们传递给get_group,例如,gb_dict.keys() 会返回一个组名列表,然后你可以将它们传递给get_group
  • 是的,我是个白痴,请重新阅读您的答案。现在一切正常!你是明星,非常感谢你,为愚蠢的 Q 道歉!

标签: python python-2.7 pandas group-by


【解决方案1】:

分组后,您可以使用属性.groups 获取组,这将返回组名的字典,然后您可以动态地迭代字典键,因此您无需对大小进行硬编码:

In [22]:
df = pd.DataFrame({'grp':list('aabbbc'), 'val':np.arange(6)})
df

Out[22]:
  grp  val
0   a    0
1   a    1
2   b    2
3   b    3
4   b    4
5   c    5

In [23]:
gp = df.groupby('grp')
gp.groups

Out[23]:
{'a': Int64Index([0, 1], dtype='int64'),
 'b': Int64Index([2, 3, 4], dtype='int64'),
 'c': Int64Index([5], dtype='int64')}

In [25]:    
for g in gp.groups.keys():
    print(gp.get_group(g))

  grp  val
0   a    0
1   a    1
  grp  val
2   b    2
3   b    3
4   b    4
  grp  val
5   c    5

【讨论】:

  • 好的,我明白你的意思了。感谢您的解释!我最终得到了这个虽然 gb_dict = gb.groups gb_dict['Trial 1'] Out[162]: [0L, 1L, 2L, 3L, 等等,它似乎失去了原始值和格式 - 我想输出仍然在数据框中以保留结构!
  • 请用任何额外的代码和信息编辑您的问题,不要把它放在 cmets 中
猜你喜欢
  • 2013-10-21
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 2018-12-05
相关资源
最近更新 更多