【发布时间】:2020-12-16 05:39:05
【问题描述】:
tl;dr- 我有一个数据框,其中一列是布尔值列表。我需要创建另一列来显示找到第一个 True 值的列表的索引。
详细解释:
我有一个带有经济数据时间表的 Pandas 数据框(每列是四分之一)。
我正在尝试得出一些特定的指标,而我坚持的指标是“恢复”。我正在尝试确定在时间线超过之前的峰值之前经过了多少个季度。
以下是我迄今为止所做的所有工作的一些示例数据。对不起它的大小。
此特定问题的重要列:
最低点:时间线的最低点 nadir_qtr:最低点发生的季度
pre_peak:最高点之前最低点 pre_peak_qtr:前峰值发生的季度
为了找到恢复季度,我制作了一个包含布尔值列表的列 - 该数字是否大于峰值前:
df2['recovery_list'] = df2.apply(lambda x: (x['new'][x['nadir_qtr']:] > x['pre_peak']), axis=1)
我可以使用以下代码在您获得 True 值之前获得季度数:
next((i for i, j in enumerate(list(df2['recovery_list'][0])) if j), None)
Output: 7
但是当我使用代码生成新列时:
df2['recovery_qtr'] = next((i for i, j in enumerate(list(df2['recovery_list'])) if j), None)
我收到以下错误:
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
知道我在这里做错了什么吗?
我对解决这个问题的替代方法持开放态度,但这已经接近了。
| qtrid | index | area_fips | area_title | 2000.25 | 2000.5 | 2000.75 | 2001.0 | 2001.25 | 2001.5 | 2001.75 | 2002.0 | 2002.25 | 2002.5 | 2002.75 | 2003.0 | 2003.25 | 2003.5 | 2003.75 | 2004.0 | 2004.25 | 2004.5 | 2004.75 | 2005.0 | 2005.25 | 2005.5 | 2005.75 | 2006.0 | 2006.25 | 2006.5 | 2006.75 | 2007.0 | 2007.25 | 2007.5 | 2007.75 | 2008.0 | nadir | nadir_qtr | pre_peak | pre_peak_qtr | recovery_list | post_peak | post_peak_qtr | new | recovery | decline | delta |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1374 | 27075 | Lake County, Minnesota | 7518.0 | 8346.0 | 8642.0 | 7714.0 | 8154.0 | 9012.0 | 8818.0 | 8174.0 | 7642.0 | 8288.0 | 8840.0 | 8022.0 | 7854.0 | 8876.0 | 8642.0 | 7926.0 | 7838.0 | 9020.0 | 8644.0 | 8130.0 | 8060.0 | 8968.0 | 8694.0 | 8314.0 | 8182.0 | 9344.0 | 8810.0 | 8202.0 | 8214.0 | 9352.0 | 8898.0 | 8346.0 | 7642.0 | 10 | 9012.0 | 5 | [False, False, False, False, False, False, Fal... | 9352.0 | 29 | [7518.0, 8346.0, 8642.0, 7714.0, 8154.0, 9012.... | 1 | 5 | 340.0 |
| 1 | 3073 | 54063 | Monroe County, West Virginia | 3812.0 | 4126.0 | 4072.0 | 4040.0 | 3894.0 | 4062.0 | 4086.0 | 4060.0 | 3950.0 | 4122.0 | 4014.0 | 3906.0 | 3772.0 | 3912.0 | 4032.0 | 3996.0 | 4112.0 | 4224.0 | 4242.0 | 4232.0 | 3962.0 | 4138.0 | 4090.0 | 4086.0 | 3978.0 | 4096.0 | 4070.0 | 4196.0 | 4138.0 | 4134.0 | 4210.0 | 4158.0 | 3772.0 | 14 | 4126.0 | 1 | [False, False, False, True, True, True, False,... | 4242.0 | 18 | [3812.0, 4126.0, 4072.0, 4040.0, 3894.0, 4062.... | 1 | 13 | 116.0 |
| 2 | 1919 | 36119 | Westchester County, New York | 794524.0 | 820670.0 | 813970.0 | 837170.0 | 807890.0 | 829618.0 | 805440.0 | 823416.0 | 799696.0 | 822272.0 | 807492.0 | 829566.0 | 800922.0 | 822528.0 | 805160.0 | 826352.0 | 808770.0 | 832592.0 | 819536.0 | 842588.0 | 813082.0 | 838078.0 | 823780.0 | 841502.0 | 815112.0 | 842546.0 | 827984.0 | 851376.0 | 830014.0 | 862302.0 | 840974.0 | 865742.0 | 799696.0 | 10 | 837170.0 | 3 | [False, False, False, False, False, False, Fal... | 865742.0 | 31 | [794524.0, 820670.0, 813970.0, 837170.0, 80789... | 1 | 7 | 28572.0 |
| 3 | 3103 | 55011 | Buffalo County, Wisconsin | 8747.0 | 9320.0 | 9322.0 | 9298.0 | 9824.0 | 9445.0 | 9488.0 | 9910.0 | 9768.0 | 9142.0 | 10028.0 | 9060.0 | 9944.0 | 9583.0 | 10390.0 | 9256.0 | 9702.0 | 9462.0 | 9957.0 | 10740.0 | 10502.0 | 11230.0 | 11106.0 | 11158.0 | 11662.0 | 12302.0 | 12298.0 | 11267.0 | 10292.0 | 10938.0 | 10726.0 | 10450.0 | 9060.0 | 13 | 10028.0 | 10 | [False, True, False, False, False, False, True... | 12302.0 | 25 | [8747.0, 9320.0, 9322.0, 9298.0, 9824.0, 9445.... | 1 | 3 | 2274.0 |
| 4 | 3683 | C2706 | Ithaca, NY MSA | 92042.0 | 95082.0 | 93852.0 | 94730.0 | 92978.0 | 96624.0 | 94556.0 | 95156.0 | 92922.0 | 95148.0 | 95666.0 | 96214.0 | 95192.0 | 97904.0 | 97330.0 | 97772.0 | 96510.0 | 98820.0 | 98532.0 | 99160.0 | 100396.0 | 100062.0 | 99060.0 | 99840.0 | 97912.0 | 100914.0 | 99772.0 | 101050.0 | 98418.0 | 101806.0 | 101344.0 | 102708.0 | 92922.0 | 10 | 96624.0 | 5 | [False, False, False, True, True, True, False,... | 102708.0 | 31 | [92042.0, 95082.0, 93852.0, 94730.0, 92978.0, ... | 1 | 5 | 6084.0 |
| 5 | 2365 | 45019 | Charleston County, South Carolina | 362554.0 | 378358.0 | 362860.0 | 369826.0 | 362656.0 | 364742.0 | 360836.0 | 359780.0 | 358752.0 | 370100.0 | 368878.0 | 369464.0 | 369964.0 | 377104.0 | 376108.0 | 378814.0 | 379144.0 | 389946.0 | 389044.0 | 391862.0 | 388852.0 | 402586.0 | 398644.0 | 398042.0 | 396874.0 | 406484.0 | 410372.0 | 416576.0 | 417812.0 | 427552.0 | 424776.0 | 424316.0 | 358752.0 | 10 | 378358.0 | 1 | [False, False, False, False, False, True, True... | 427552.0 | 29 | [362554.0, 378358.0, 362860.0, 369826.0, 36265... | 1 | 9 | 49194.0 |
| 6 | 3448 | C1722 | Clarksburg, WV MicroSA | 35242.0 | 36634.0 | 36225.0 | 36026.0 | 35447.0 | 36476.0 | 35968.0 | 36227.0 | 35571.0 | 36785.0 | 36377.0 | 36863.0 | 35954.0 | 37505.0 | 37048.0 | 37325.0 | 36400.0 | 37701.0 | 37407.0 | 37503.0 | 36407.0 | 37653.0 | 37616.0 | 37383.0 | 36977.0 | 37625.0 | 37037.0 | 37227.0 | 36265.0 | 37617.0 | 37227.0 | 37570.0 | 35571.0 | 10 | 36785.0 | 9 | [False, True, False, True, True, True, False, ... | 37701.0 | 17 | [35242.0, 36634.0, 36225.0, 36026.0, 35447.0, ... | 1 | 1 | 916.0 |
| 7 | 3297 | C1086 | Alice, TX MicroSA | 13001.0 | 13245.0 | 13460.0 | 13800.0 | 13642.0 | 14243.0 | 14145.0 | 14031.0 | 13873.0 | 14086.0 | 14208.0 | 14106.0 | 14522.0 | 14855.0 | 14959.0 | 15120.0 | 15105.0 | 15492.0 | 15554.0 | 15695.0 | 15517.0 | 15713.0 | 15970.0 | 15874.0 | 16127.0 | 16666.0 | 16778.0 | 16876.0 | 17380.0 | 18144.0 | 18178.0 | 17937.0 | 13873.0 | 10 | 14243.0 | 5 | [False, False, True, True, True, True, True, T... | 18178.0 | 30 | [13001.0, 13245.0, 13460.0, 13800.0, 13642.0, ... | 1 | 5 | 3935.0 |
| 8 | 742 | 18063 | Hendricks County, Indiana | 58656.0 | 60586.0 | 60618.0 | 60272.0 | 59964.0 | 63238.0 | 65434.0 | 65000.0 | 65534.0 | 66824.0 | 68710.0 | 68680.0 | 67982.0 | 70936.0 | 72554.0 | 74030.0 | 74836.0 | 77138.0 | 78370.0 | 78876.0 | 77654.0 | 79878.0 | 81936.0 | 82752.0 | 83174.0 | 86144.0 | 88166.0 | 88914.0 | 88606.0 | 91556.0 | 93514.0 | 93744.0 | 65000.0 | 9 | 65534.0 | 8 | [True, True, True, True, True, True, True, Tru... | 93744.0 | 31 | [58656.0, 60586.0, 60618.0, 60272.0, 59964.0, ... | 1 | 1 | 28210.0 |
| 9 | 3618 | C2446 | Great Bend, KS MicroSA | 12532.0 | 13213.0 | 13015.0 | 13207.0 | 12852.0 | 13368.0 | 13077.0 | 13216.0 | 13144.0 | 13396.0 | 13348.0 | 12961.0 | 12487.0 | 12791.0 | 12690.0 | 12638.0 | 12520.0 | 12953.0 | 12679.0 | 12804.0 | 12600.0 | 13152.0 | 12685.0 | 12886.0 | 12946.0 | 13264.0 | 12943.0 | 13339.0 | 13160.0 | 13433.0 | 13111.0 | 13546.0 | 12487.0 | 14 | 13396.0 | 9 | [False, False, False, False, False, False, Fal... | 13546.0 | 31 | [12532.0, 13213.0, 13015.0, 13207.0, 12852.0, ... | 1 | 5 | 150.0 |
【问题讨论】:
标签: python python-3.x pandas dataframe