具有以下数据框
token name ltp change
0 12345.0 abc 6.0 NaN
1 12345.0 abc 10.0 67.0
2 12345.0 abc 17.0 70.0
3 12345.0 abc 17.0 0.0
4 12345.0 abc 18.0 6.0
5 12345.0 abc 20.0 11.0
6 6789.0 xyz 2.0 -90.0
7 6789.0 xyz 3.0 50.0
8 6789.0 xyz 9.0 200.0
9 6789.0 xyz 16.0 78.0
10 6789.0 xyz 16.0 0.0
11 6789.0 xyz 18.0 12.0
我需要实现以下目标:
在“名称”列中,如果名称发生更改,则“更改”列应为“ nan”。如果相同,则应通过比较连续的ltp来得出更改。
为了标识“名称”列的每个元素,我使用了loc方法。下面是我的代码。
if df.loc[0:0,'name']==df.loc[1:1,'name']:
df['change']=df['ltp'].pct_change().round(decimals=2)*100
else:
df['change']='nan'
我收到错误消息:
ValueError: Can only compare identically-labeled Series objects
如何实现此比较?
答案 0 :(得分:0)
您希望对// pseudo code
let maxRetry = 10
let mutable tryCount = 0
let mutable myResult: Result option = None
while tryCount < maxRetry do
let result = try something
if result = success then
myResult <- some result
tryCount <- maxRetry
else
some delay
myResult
做groupby
:
pct_change
输出:
df.groupby('name')['ltp'].pct_change()
将其分配给数据框的一列:
0 NaN
1 0.666667
2 0.700000
3 0.000000
4 0.058824
5 0.111111
6 NaN
7 0.500000
8 2.000000
9 0.777778
10 0.000000
11 0.125000
Name: ltp, dtype: float64
输出:
df['% change'] = df.groupby('name')['ltp'].pct_change().round(2).mul(100)
df