python - 使用 pandas 键入预期的特定输出

标签 python pandas

我使用下面的代码计算了 changbtwread 列的多种类型。

for v in df['Type'].unique():
    df[f'Changebetweenreadings_{v}'] = df.loc[df['Type'].eq(v), 'Last'].diff()

给定

  Type     Last  changbtwread_ada  changbtwread_btc  changbtwread_eur
0  ada  3071.56               NaN               NaN               NaN
1  ada  3097.82             26.26               NaN               NaN
2  btc  1000.00               NaN               NaN               NaN
3  ada  2000.00          -1097.82               NaN               NaN
4  btc  3000.00               NaN            2000.0               NaN
5  eur  1000.00               NaN               NaN               NaN
6  eur  1500.00               NaN               NaN             500.0

现在我需要根据这些changebtw列计算方向列。

我的输出应该是这样的

Type    change_dir_ada    change_dir_btc   change_dir_eur   
ada       Nut
ada       Pos
btc                          Nut
ada       Neg
btc                          Nut
eur
eur                                               Pos

我尝试过的快速修复方法是使用此代码。

df.loc[df.Changebetweenreadings_btceur > 0, 'ChangeDirection_btceur'] = 'Pos' 
df.loc[df.Changebetweenreadings_btceur < 0, 'ChangeDirection_btceur'] = 'Neg' 
df.loc[df.Changebetweenreadings_btceur == 0, 'ChangeDirection_btceur'] = 'Nut'

df.loc[df.Changebetweenreadings_adabtc > 0, 'ChangeDirection_adabtc'] = 'Pos' 
df.loc[df.Changebetweenreadings_adabtc < 0, 'ChangeDirection_adabtc'] = 'Neg' 
df.loc[df.Changebetweenreadings_adabtc == 0, 'ChangeDirection_adabtc'] = 'Nut'

但是我认为这是很多代码,而且它不是一种动态的执行方式。 我期待这样的事情。

for v in df['Type'].unique():
   df[f'Changebetweenreadings_{v}'] #--> Do this calculation above.

它不适用于这些值

change        type    dir_ada   dir_btc
-3637.31      ada      
-4E-08        ada       Neg
-3637.31      ada       Nut
3637.8        btc                  Nut

它代替 Pos 提供随机映射。

最佳答案

我相信你需要:

vals = ['Pos','Neg', 'Nut']
for v in df['Type'].unique():
    df[f'change_dir_{v}'] = df.loc[df['Type'].eq(v), 'Last'].diff()
    df[f'change_dir_{v}'] = np.select([df[f'change_dir_{v}'] > 0, 
                                       df[f'change_dir_{v}'] < 0, 
                                       df[f'change_dir_{v}']== 0], vals, '')


print (df)
  Type     Last change_dir_ada change_dir_btc change_dir_eur
0  ada  3071.56                                             
1  ada  3097.80            Pos                              
2  btc  1000.00                                             
3  ada  2000.00            Neg                              
4  btc  3000.00                           Pos               
5  eur  1000.00                                             
6  eur  1500.00                                          Pos

关于python - 使用 pandas 键入预期的特定输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890188/

相关文章:

python - (python) 日期范围内的 "Passing Go"

python - 检查转义字符的 python 字符串

python - 在数据框列 pandas 上应用条件

python - 在运行时确定 Python 的实现?

python - 将 Theano.scan 与共享变量一起使用

python - 从多个 DataFrame Python 中收集重复的列名称

python - 如何在两个不同的列上合并两个 pandas 数据框,这些列的元素不按顺序排列?

python - 如何将数组格式化为 Pandas 中的特定数据帧格式?

python - 如何在 python 中选择多个列

python - 除了 Udp6SocketTransport Pysnmp 之外还有其他替代方案吗