比较熊猫中单个列的字符串元素

时间:2020-05-25 13:10:44

标签: python pandas

具有以下数据框

      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

如何实现此比较?

1 个答案:

答案 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