【问题标题】:pandas create a subset according to a value in a columnpandas 根据列中的值创建子集
【发布时间】:2022-01-07 08:18:45
【问题描述】:

我这个数据框:

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

感谢任何帮助。

【问题讨论】:

标签: python dataframe subset


【解决方案1】:

您可以简单地对数据框进行切片:

df_86 = df.loc[df['ColName'] == 86,:]

【讨论】:

    【解决方案2】:

    另一种动态执行此操作而无需事先指定组的方式。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2014-01-21
      相关资源
      最近更新 更多