pandas 根据列中的值创建子集
pandas create a subset according to a value in a column
我有这个数据框:
86,1/28/2004 0:00:00,16.9
86,5/25/2004 0:00:00,17.01
86,7/22/2004 0:00:00,17.06
87,11/15/2004 0:00:00,7.39
87,3/14/2005 0:00:00,7.59
86,11/15/2004 0:00:00,17.29
86,3/14/2005 0:00:00,17.38
86,4/19/2005 0:00:00,17.43
86,5/19/2005 0:00:00,17.28
87,1/22/2004 0:00:00,7.44
87,5/13/2004 0:00:00,7.36
我想根据第一列的值 (id
) 处理两个单独的数据框。理想情况下,我希望:
87,11/15/2004 0:00:00,7.39
87,3/14/2005 0:00:00,7.59
87,1/22/2004 0:00:00,7.44
87,5/13/2004 0:00:00,7.36
和
86,1/28/2004 0:00:00,16.9
86,5/25/2004 0:00:00,17.01
86,7/22/2004 0:00:00,17.06
86,11/15/2004 0:00:00,17.29
86,3/14/2005 0:00:00,17.38
86,4/19/2005 0:00:00,17.43
86,5/19/2005 0:00:00,17.28
如您所见,我有一个数据框,第一列全部为 87,另一个数据框为 86。
这是我读取数据帧的方式:
dfr = pd.read_csv(fname,sep=',',index_col=False,header=None)
我认为 groupby
不是正确的选项,如果我理解正确的话。
我考虑的查询是:
aa = dfr.query(dfr.iloc[:,0]==86)
但是,我有这个错误:
expr must be a string to be evaluated, <class 'pandas.core.series.Series'> given
您可以简单地切片您的数据框:
df_86 = df.loc[df['ColName'] == 86,:]
无需事先指定组的动态执行的另一种方法。
df = pd.DataFrame({'ID': np.repeat([1, 2, 3], 4), 'col2': np.repeat([10, 11, 12], 4)})
获取唯一分组:
groups = df['ID'].unique()
创建一个空字典来存储新的数据帧
new_dfs = {}
从切片循环并创建新的数据帧:
for group in groups:
name = "ID" + str(group)
new_dfs[name] = df[df['ID'] == group]
new_dfs['ID1']
给出:
ID col2
0 1 10
1 1 10
2 1 10
3 1 10
我有这个数据框:
86,1/28/2004 0:00:00,16.9
86,5/25/2004 0:00:00,17.01
86,7/22/2004 0:00:00,17.06
87,11/15/2004 0:00:00,7.39
87,3/14/2005 0:00:00,7.59
86,11/15/2004 0:00:00,17.29
86,3/14/2005 0:00:00,17.38
86,4/19/2005 0:00:00,17.43
86,5/19/2005 0:00:00,17.28
87,1/22/2004 0:00:00,7.44
87,5/13/2004 0:00:00,7.36
我想根据第一列的值 (id
) 处理两个单独的数据框。理想情况下,我希望:
87,11/15/2004 0:00:00,7.39
87,3/14/2005 0:00:00,7.59
87,1/22/2004 0:00:00,7.44
87,5/13/2004 0:00:00,7.36
和
86,1/28/2004 0:00:00,16.9
86,5/25/2004 0:00:00,17.01
86,7/22/2004 0:00:00,17.06
86,11/15/2004 0:00:00,17.29
86,3/14/2005 0:00:00,17.38
86,4/19/2005 0:00:00,17.43
86,5/19/2005 0:00:00,17.28
如您所见,我有一个数据框,第一列全部为 87,另一个数据框为 86。
这是我读取数据帧的方式:
dfr = pd.read_csv(fname,sep=',',index_col=False,header=None)
我认为 groupby
不是正确的选项,如果我理解正确的话。
我考虑的查询是:
aa = dfr.query(dfr.iloc[:,0]==86)
但是,我有这个错误:
expr must be a string to be evaluated, <class 'pandas.core.series.Series'> given
您可以简单地切片您的数据框:
df_86 = df.loc[df['ColName'] == 86,:]
无需事先指定组的动态执行的另一种方法。
df = pd.DataFrame({'ID': np.repeat([1, 2, 3], 4), 'col2': np.repeat([10, 11, 12], 4)})
获取唯一分组:
groups = df['ID'].unique()
创建一个空字典来存储新的数据帧
new_dfs = {}
从切片循环并创建新的数据帧:
for group in groups:
name = "ID" + str(group)
new_dfs[name] = df[df['ID'] == group]
new_dfs['ID1']
给出:
ID col2
0 1 10
1 1 10
2 1 10
3 1 10