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



具有以下数据帧

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

我怎样才能做到这一点比较?

你想用pct_changegroupby

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

输出:

token name   ltp  change  % change
0   12345.0  abc   6.0     NaN       NaN
1   12345.0  abc  10.0    67.0      67.0
2   12345.0  abc  17.0    70.0      70.0
3   12345.0  abc  17.0     0.0       0.0
4   12345.0  abc  18.0     6.0       6.0
5   12345.0  abc  20.0    11.0      11.0
6    6789.0  xyz   2.0   -90.0       NaN
7    6789.0  xyz   3.0    50.0      50.0
8    6789.0  xyz   9.0   200.0     200.0
9    6789.0  xyz  16.0    78.0      78.0
10   6789.0  xyz  16.0     0.0       0.0
11   6789.0  xyz  18.0    12.0      12.0

最新更新