提问人:Darshika Verma 提问时间:10/23/2023 最后编辑:Darshika Verma 更新时间:10/26/2023 访问量:71
如何使用 SQL/Python 获得第三列中几乎相等(最高小数)的两列值的乘法?
How to get multiplication of two column's value which is nearly equal (highest decimal) in the third column using SQL/Python?
问:
我有一个名为df的数据集
将两列(Open 和 low,具有相等的值)相乘应使结果几乎等于引用“High”列的最高整数(十进制)值,并将结果与相应的日期High_new存储。
例如,在附表中 -
Open 和 High 两列的值相等 (100),因此 100*2 = 200,而 200.8 是最接近 200 的最高十进制(整数)值,因此我们在High_new列中得到 200.8 及其对应的日期(参考输出数据集)(** 注意 - 我们没有考虑 200.3,因为 200.8 是 200 的最高十进制值 200)
那么,如何获取列High_new和date_new列呢?(可以使用python/SQL解决)
到目前为止,我已经尝试了以下代码(也共享此代码的输出)
**(这只是可能有效的初始逻辑)-
import pandas as pd
import numpy as np
import re
data = {'Date':['11/1/18', '12/3/18', '1/1/19', '2/1/19', '3/1/19'],
'Open':[72, 99, 101.25, 92.05, 100],
'High':[115.4, 144.3, 200.8, 200.3, 135.5],
'Low' :[72,91,88.3,84,100]}
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
df
df['high2'] = np.where(df['Open'] == df['Low'], df['Open']*2, np.nan)
答:
1赞
Tim Roberts
10/26/2023
#1
我发现“最大小数点”的东西很不寻常,很可能是一个误解,但这确实符合你的要求。我创建了一个单独的数据帧,以保留每个整数中的最大分数,然后逐行查找最接近的分数。
import pandas as pd
data = {'Date':['11/1/18', '12/3/18', '1/1/19', '2/1/19', '3/1/19'],
'Open':[72, 99, 101.25, 92.05, 100],
'High':[115.4, 144.3, 200.8, 200.3, 135.5],
'Low' :[72,91,88.3,84,100]}
# Create DataFrame.
df = pd.DataFrame(data)
# Create a dataframe with only the highest for each integer.
sub = df[['Date','High']].sort_values(by='High')
sub['IntHigh'] = df['High'].astype(int)
sub.drop_duplicates('IntHigh',keep='last', inplace=True)
# Find closest high for each row where open==low.
def findclosest(row):
if row['Open'] != row['Low']:
return row['High'],row['Date']
sub['Delta'] = (sub['IntHigh']-row['Open']*2).abs()
chk = sub.sort_values('Delta').index[0]
return sub.loc[chk,['High','Date']]
df[['High2','Date2']] = df.apply( findclosest, axis=1 )
print(df)
输出:
Date Open High Low High2 Date2
0 11/1/18 72.00 115.4 72.0 144.3 12/3/18
1 12/3/18 99.00 144.3 91.0 144.3 12/3/18
2 1/1/19 101.25 200.8 88.3 200.8 1/1/19
3 2/1/19 92.05 200.3 84.0 200.3 2/1/19
4 3/1/19 100.00 135.5 100.0 200.8 1/1/19
评论