pandas 基于 Dataframe 行值的货币对强度列表

s4n0splo  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(88)

基于以下货币实力排名数据框:

EUR USD GBP JPY AUD CHF CAD NZD
2023-02-24 12:00:00 5.0 8.0 4.0 3.0 2.0 7.0 6.0 1.0
2023-02-24 13:00:00 6.0 8.0 4.0 3.0 2.0 7.0 5.0 1.0
2023-02-24 14:00:00 7.0 8.0 4.0 3.0 2.0 6.0 5.0 1.0
2023-02-24 15:00:00 7.0 8.0 6.0 2.0 3.0 5.0 4.0 1.0

如何计算并返回每一行中最强到最弱的货币对列表?

    • 预期产出**

例如,在最后一行,最强的货币对是"USD_NZD",因为USD排名最高,NZD排名最低。

['USD_NZD', 'USD_JPY'] then all other currency pairs
    • 数据**
{'EUR': {Timestamp('2023-02-24 12:00:00'): 5.0,
  Timestamp('2023-02-24 13:00:00'): 6.0,
  Timestamp('2023-02-24 14:00:00'): 7.0,
  Timestamp('2023-02-24 15:00:00'): 7.0},
 'USD': {Timestamp('2023-02-24 12:00:00'): 8.0,
  Timestamp('2023-02-24 13:00:00'): 8.0,
  Timestamp('2023-02-24 14:00:00'): 8.0,
  Timestamp('2023-02-24 15:00:00'): 8.0},
 'GBP': {Timestamp('2023-02-24 12:00:00'): 4.0,
  Timestamp('2023-02-24 13:00:00'): 4.0,
  Timestamp('2023-02-24 14:00:00'): 4.0,
  Timestamp('2023-02-24 15:00:00'): 6.0},
 'JPY': {Timestamp('2023-02-24 12:00:00'): 3.0,
  Timestamp('2023-02-24 13:00:00'): 3.0,
  Timestamp('2023-02-24 14:00:00'): 3.0,
  Timestamp('2023-02-24 15:00:00'): 2.0},
 'AUD': {Timestamp('2023-02-24 12:00:00'): 2.0,
  Timestamp('2023-02-24 13:00:00'): 2.0,
  Timestamp('2023-02-24 14:00:00'): 2.0,
  Timestamp('2023-02-24 15:00:00'): 3.0},
 'CHF': {Timestamp('2023-02-24 12:00:00'): 7.0,
  Timestamp('2023-02-24 13:00:00'): 7.0,
  Timestamp('2023-02-24 14:00:00'): 6.0,
  Timestamp('2023-02-24 15:00:00'): 5.0},
 'CAD': {Timestamp('2023-02-24 12:00:00'): 6.0,
  Timestamp('2023-02-24 13:00:00'): 5.0,
  Timestamp('2023-02-24 14:00:00'): 5.0,
  Timestamp('2023-02-24 15:00:00'): 4.0},
 'NZD': {Timestamp('2023-02-24 12:00:00'): 1.0,
  Timestamp('2023-02-24 13:00:00'): 1.0,
  Timestamp('2023-02-24 14:00:00'): 1.0,
  Timestamp('2023-02-24 15:00:00'): 1.0}}
muk1a3rh

muk1a3rh1#

您可能需要使用IIUC:

list(map("_".join, zip(df.idxmax(1), df.idxmin(1))))

输出:

['USD_NZD', 'USD_NZD', 'USD_NZD', 'USD_NZD']

如果需要这些值,可以使用:

list(zip(df.max(1), df.min(1)))

输出:

[(8.0, 1.0), (8.0, 1.0), (8.0, 1.0), (8.0, 1.0)]

如果希望所有对都按绝对差值排序,可以使用以下命令:

from itertools import combinations

f = lambda r: list(
    map(
        lambda x: x[0][0] + "_" + x[1][0],
        sorted(
            combinations(sorted(zip(r.index, r.values), key=lambda x: -x[1]), 2),
            key=lambda t: t[0][1] - t[1][1],
            reverse=True,
        ),
    )
)
out = df.apply(f, axis=1)

print(out)

2023-02-24 12:00:00    [USD_NZD, USD_AUD, CHF_NZD, USD_JPY, CHF_AUD, ...
2023-02-24 13:00:00    [USD_NZD, USD_AUD, CHF_NZD, USD_JPY, CHF_AUD, ...
2023-02-24 14:00:00    [USD_NZD, USD_AUD, EUR_NZD, USD_JPY, EUR_AUD, ...
2023-02-24 15:00:00    [USD_NZD, USD_JPY, EUR_NZD, USD_AUD, EUR_JPY, ...
dtype: object

相关问题