Python 从另一个数据帧中提取数据帧

Python 从另一个数据帧中提取数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,假设我有以下数据帧: Date Open High Low Close Volume min max Loc Date 2020-06-15 14:00:00 2020-06-15 14:00:00 0.000123 0.000130 0.000121 0.000128 1467828.0 0.00012081 0.00013040

假设我有以下数据帧:

                                   Date      Open      High       Low     Close     Volume         min         max  Loc
Date
2020-06-15 14:00:00 2020-06-15 14:00:00  0.000123  0.000130  0.000121  0.000128  1467828.0  0.00012081  0.00013040    0
2020-06-15 18:00:00 2020-06-15 18:00:00  0.000128  0.000129  0.000123  0.000125  1264642.0           0           0    1
2020-06-15 22:00:00 2020-06-15 22:00:00  0.000125  0.000126  0.000122  0.000123   723738.0           0           0    2
我正在尝试创建一个新的数据帧,其中:

  • 数据应为
    Open
    min
    max
    Loc
    列,但仅当
    min
    max
    为>0时
  • 数据帧的索引应为列
    Loc
  • 现在我知道,要从另一个数据帧创建数据帧,我可以使用
    pandas.concat()
    ,但我不知道如何设置上面解释的条件。有人能帮我吗

    预期输出示例:

     Loc    Open          min         max   
       0   0.000123    0.00012081  0.00013040    
    

    为比较两列中较大的一列创建的第一个筛选依据掩码,选择列依据,最后添加:

    或者通过
    对按位
    的列和链掩码分别进行比较:

    df = df.loc[df['min'].gt(0) & df['max'].gt(0), ['Open','min','max','Loc']].set_index('Loc')
    
    编辑:

    因为错误:

    在'str'和'int'的实例之间不支持'>'

    这意味着
    min
    max
    列(或两者)中存在值的字符串表示,因此在上述解决方案之前将值转换为数字:

    df['min'] = pd.to_numeric(df['min'], errors='coerce')
    df['max'] = pd.to_numeric(df['max'], errors='coerce')
    

    为比较两列中较大的一列创建的第一个筛选依据掩码,选择列依据,最后添加:

    或者通过
    对按位
    的列和链掩码分别进行比较:

    df = df.loc[df['min'].gt(0) & df['max'].gt(0), ['Open','min','max','Loc']].set_index('Loc')
    
    编辑:

    因为错误:

    在'str'和'int'的实例之间不支持'>'

    这意味着
    min
    max
    列(或两者)中存在值的字符串表示,因此在上述解决方案之前将值转换为数字:

    df['min'] = pd.to_numeric(df['min'], errors='coerce')
    df['max'] = pd.to_numeric(df['max'], errors='coerce')
    

    构建示例数据帧:

                                       Date      Open      High       Low     Close     Volume         min         max  Loc
    Date
    2020-06-15 14:00:00 2020-06-15 14:00:00  0.000123  0.000130  0.000121  0.000128  1467828.0  0.00012081  0.00013040    0
    2020-06-15 18:00:00 2020-06-15 18:00:00  0.000128  0.000129  0.000123  0.000125  1264642.0           0           0    1
    2020-06-15 22:00:00 2020-06-15 22:00:00  0.000125  0.000126  0.000122  0.000123   723738.0           0           0    2
    
    df=pd.DataFrame(
    资料={
    “日期”:[“2020-06-15 14:00:00”、“2020-06-15 18:00:00”、“2020-06-15 22:00:00”],
    “打开”:[0.000123,0.000128,0.000125],
    “高”:[0.000130,0.000129,0.000126],
    “低”:[0.000121、0.000123、0.000122],
    “关闭”:[0.000128,0.000125,0.000123],
    “卷”:[1467828.0、1264642.0、723738.0],
    “最小值”:[0.00012081,0,0],
    “最大值”:[0.00013040,0,0],
    “Loc”:[0,1,2],
    }
    )
    df.set_索引(“日期”,drop=False,inplace=True)
    
    解决办法是:

    #将索引设置为其他列
    #(“df2”是“df”的副本)
    df2=df.集合索引(“Loc”)
    #只保留一些列
    df2=df2[[“打开”、“最小”、“最大”]]
    #根据条件筛选行
    df2=df2[(df2[“最小”]>0)和(df2[“最大”]>0)]
    
    df2
    将如下所示:

             Open       min      max
    Loc                             
    0    0.000123  0.000121  0.00013
    

    构建示例数据帧:

                                       Date      Open      High       Low     Close     Volume         min         max  Loc
    Date
    2020-06-15 14:00:00 2020-06-15 14:00:00  0.000123  0.000130  0.000121  0.000128  1467828.0  0.00012081  0.00013040    0
    2020-06-15 18:00:00 2020-06-15 18:00:00  0.000128  0.000129  0.000123  0.000125  1264642.0           0           0    1
    2020-06-15 22:00:00 2020-06-15 22:00:00  0.000125  0.000126  0.000122  0.000123   723738.0           0           0    2
    
    df=pd.DataFrame(
    资料={
    “日期”:[“2020-06-15 14:00:00”、“2020-06-15 18:00:00”、“2020-06-15 22:00:00”],
    “打开”:[0.000123,0.000128,0.000125],
    “高”:[0.000130,0.000129,0.000126],
    “低”:[0.000121、0.000123、0.000122],
    “关闭”:[0.000128,0.000125,0.000123],
    “卷”:[1467828.0、1264642.0、723738.0],
    “最小值”:[0.00012081,0,0],
    “最大值”:[0.00013040,0,0],
    “Loc”:[0,1,2],
    }
    )
    df.set_索引(“日期”,drop=False,inplace=True)
    
    解决办法是:

    #将索引设置为其他列
    #(“df2”是“df”的副本)
    df2=df.集合索引(“Loc”)
    #只保留一些列
    df2=df2[[“打开”、“最小”、“最大”]]
    #根据条件筛选行
    df2=df2[(df2[“最小”]>0)和(df2[“最大”]>0)]
    
    df2
    将如下所示:

             Open       min      max
    Loc                             
    0    0.000123  0.000121  0.00013
    

    多谢各位!我遇到以下错误:'>'在'str'和'int'实例之间不受支持,我想这与原始数据帧有关。也许我需要将所有内容都转换为float或int?@San9096-我想它的意思是
    max
    min
    ,或者两者都是字符串。给我一些解决方案。是的,我没有注意到该列是字符串格式,to_numeric()应该将其转换是的,看到了您的编辑,我使用的是完全相同的行。令人惊叹的!多谢各位。我接受了。非常感谢!我遇到以下错误:'>'在'str'和'int'实例之间不受支持,我想这与原始数据帧有关。也许我需要将所有内容都转换为float或int?@San9096-我想它的意思是
    max
    min
    ,或者两者都是字符串。给我一些解决方案。是的,我没有注意到该列是字符串格式,to_numeric()应该将其转换是的,看到了您的编辑,我使用的是完全相同的行。令人惊叹的!多谢各位。我接受了。