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()应该将其转换是的,看到了您的编辑,我使用的是完全相同的行。令人惊叹的!多谢各位。我接受了。