首页 > 解决方案 > 比较嵌套列表之间的值

问题描述

我正在尝试将两个单独列表中的最后一个值与匹配的名称进行比较。例如:[(('Matching Name', '2015-06-25', 25.37), ('Matching Name', '2018-08-09', 74.66))]我想通过 [] 括号内匹配名称的每个嵌套列表提取从 25.37 到 74.66 的百分比变化。

示例输入数据:

>  "(('', '2015-06-25', 25.37), ('', '2018-08-09', 74.66))","(('A',
> '2008-12-26', 10.38), ('A', '2019-04-29', 77.33))","(('AA',
> '2016-11-01', 22.92), ('AA', '2019-04-29', 26.85))","(('AAL',
> '2008-12-26', 7.1), ('AAL', '2019-04-29', 33.77))","(('AAMC',
> '2012-12-13', 15.), ('AAMC', '2019-04-29', 9.94))"

标签: pythonpython-3.xlistnested

解决方案


pandas是一个很好的第三方工具用于此:

raw = [
    ('', '2015-06-25', 25.37), ('', '2018-08-09', 74.66),
    ('A', '2008-12-26', 10.38), ('A', '2019-04-29', 77.33),
    ('AA', '2016-11-01', 22.92), ('AA', '2019-04-29', 26.85),
    ('AAL', '2008-12-26', 7.1), ('AAL', '2019-04-29', 33.77),
    ('AAMC', '2012-12-13', 15.), ('AAMC', '2019-04-29', 9.94)
]


import pandas as pd
df = pd.DataFrame(raw, columns=['symbol', 'date', 'value'])
df['date'] = pd.to_datetime(df['date'])
df.sort_values( ['symbol', 'date'] )

grouped = dict(list(df.groupby('symbol')))
for symbol, performance in grouped.items():
    print('')
    print(symbol)
    print(performance.drop(columns=['symbol']).diff())

输出如下:

''
       date  value
0       NaT    NaN
1 1141 days  49.29

'A'
       date  value
2       NaT    NaN
3 3776 days  66.95

'AA'
      date  value
4      NaT    NaN
5 909 days   3.93

'AAL'
       date  value
6       NaT    NaN
7 3776 days  26.67

'AAMC'
       date  value
8       NaT    NaN
9 2328 days  -5.06

推荐阅读