我正在使用pandas库,我想在df
具有n列(n> 0)的数据帧中添加两个新列.
这些新列是将函数应用于数据框中的一列的结果.
要应用的功能如下:
def calculate(x):
...operate...
return z, y
Run Code Online (Sandbox Code Playgroud)
为仅返回值的函数创建新列的一种方法是:
df['new_col']) = df['column_A'].map(a_function)
Run Code Online (Sandbox Code Playgroud)
所以,我想要的,并尝试不成功(*),是这样的:
(df['new_col_zetas'], df['new_col_ys']) = df['column_A'].map(calculate)
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?我没有任何线索扫描文档.
**df['column_A'].map(calculate)
返回一个pandas系列,每个项目由一个元组z,y组成.并尝试将其分配给两个dataframe列会产生ValueError.*
我正在尝试计算两个 Pandas 列之间的 Levenshtein 距离,但我卡住了这是我正在使用的库。这是一个最小的、可重现的示例:
import pandas as pd
from textdistance import levenshtein
attempts = [['passw0rd', 'pasw0rd'],
['passwrd', 'psword'],
['psw0rd', 'passwor']]
df=pd.DataFrame(attempts, columns=['password', 'attempt'])
Run Code Online (Sandbox Code Playgroud)
password attempt
0 passw0rd pasw0rd
1 passwrd psword
2 psw0rd passwor
Run Code Online (Sandbox Code Playgroud)
我可怜的尝试:
df.apply(lambda x: levenshtein.distance(*zip(x['password'] + x['attempt'])), axis=1)
Run Code Online (Sandbox Code Playgroud)
这就是该功能的工作原理。它接受两个字符串作为参数:
levenshtein.distance('helloworld', 'heloworl')
Run Code Online (Sandbox Code Playgroud)
Out[1]: 2
Run Code Online (Sandbox Code Playgroud) 我正在研究/回测交易系统.
我有一个包含OHLC数据的Pandas数据框,并添加了几个计算列,用于识别我将用作启动头寸信号的价格模式.
我现在想添加一个能够跟踪当前净头寸的列.我已经尝试使用df.apply(),但是将数据帧本身作为参数而不是行对象传递,因为后者我似乎无法回顾之前的行以确定它们是否导致任何价格模式:
open_campaigns = []
Campaign = namedtuple('Campaign', 'open position stop')
def calc_position(df):
# sum of current positions + any new positions
if entered_long(df):
open_campaigns.add(
Campaign(
calc_long_open(df.High.shift(1)),
calc_position_size(df),
calc_long_isl(df)
)
)
return sum(campaign.position for campaign in open_campaigns)
def entered_long(df):
return buy_pattern(df) & (df.High > df.High.shift(1))
df["Position"] = df.apply(lambda row: calc_position(df), axis=1)
Run Code Online (Sandbox Code Playgroud)
但是,这会返回以下错误:
ValueError: ('The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()', u'occurred at index 1997-07-16 08:00:00')
Run Code Online (Sandbox Code Playgroud)
滚动窗口函数似乎很自然,但据我所知,它们只作用于单个时间序列或列,因此无法工作,因为我需要在多个时间点访问多列的值.
我该怎么做呢?
python algorithmic-trading quantitative-finance dataframe pandas
我有一个数据帧如下.我想根据列'需要'添加一列(例如在行0中,需要为1,所以选择part1值-0.17.我已经粘贴了我想要的数据帧.谢谢.
df = pd.DataFrame({
'date': [20130101,20130101, 20130103, 20130104, 20130105, 20130107],
'need':[1,3,2,4,3,1],
'part1':[-0.17,-1.03,1.59,-0.05,-0.1,0.9],
'part2':[0.67,-0.03,1.95,-3.25,-0.3,0.6],
'part3':[0.7,-3,1.5,-0.25,-0.37,0.62],
'part4':[0.24,-0.44,1.335,-0.45,-0.57,0.92]
})
date need output part1 part2 part3 part4
0 20130101 1 -0.17 -0.17 0.67 0.70 0.240
1 20130101 3 -3.00 -1.03 -0.03 -3.00 -0.440
2 20130103 2 1.95 1.59 1.95 1.50 1.335
3 20130104 4 -0.45 -0.05 -3.25 -0.25 -0.450
4 20130105 3 -0.37 -0.10 -0.30 -0.37 -0.570
5 20130107 1 0.90 0.90 0.60 0.62 0.920
Run Code Online (Sandbox Code Playgroud) 我有一个包含以下内容的熊猫数据框:
Athlete A Athlete B Athlete C
speed=10 speed=12 speed=6
endurance=60 endurance=59 endurance=64
Run Code Online (Sandbox Code Playgroud)
我想根据他们的速度和耐力对这三位运动员的力量进行排名。我想给耐力稍微大一点的权重(0.6)。是否有任何python库可以根据多个条件进行排名?