Python 获取groupby对象以忽略丢失的数据帧
我正在使用pandas读取excel文件,并将电子表格转换为数据框。然后我应用groupby,并使用get_group将各个组存储在变量中,以供以后计算。 我的问题是,输入文件的大小并不总是相同的,有时groupby会产生10个df,有时25个df等等。如果初始数据中缺少df,如何让我的程序忽略它Python 获取groupby对象以忽略丢失的数据帧,python,python-2.7,pandas,group-by,Python,Python 2.7,Pandas,Group By,我正在使用pandas读取excel文件,并将电子表格转换为数据框。然后我应用groupby,并使用get_group将各个组存储在变量中,以供以后计算。 我的问题是,输入文件的大小并不总是相同的,有时groupby会产生10个df,有时25个df等等。如果初始数据中缺少df,如何让我的程序忽略它 df = pd.read_excel(filepath, 0, skiprows=3, parse_cols='A,B,C,E,F,G', names=['Res
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语句,但我疲惫的大脑不知道在哪里
提前感谢!分组后,您可以使用属性
获取组。groups
这将返回组名的dict,然后您可以动态迭代dict键,这样就不需要硬编码大小:
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.groups
将返回组名和标签的dict:因此,您可以使用这些来获取组名和级别的dict,但这对我有什么帮助?因为您获得了组的dict,您不需要对代码中的组数进行硬编码。您看到我的答案了吗?您获得了组名和级别的dict,然后您可以使用使用组名并将其传递给get\u group
,例如,gb\u dict.keys()
返回组名列表,然后您可以将这些列表传递给get_group
是的,我是个白痴,只要重新阅读您的答案。现在一切都正常了!您是明星非常感谢您并为愚蠢的Qs道歉!好的,我现在明白您的意思了。感谢您的解释!我最终得到了这个,尽管gb_dict=gb.groups gb_dict['Trial 1']Out[162]:[0L、1L、2L、3L,等等,它似乎已经丢失了原始值和格式-我希望输出仍在数据框中以保留结构!请使用任何其他代码和信息编辑您的问题,不要将其放在注释中