回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>在多次尝试失败后,我请求帮助解决这个问题。喂,我有一张单子</p>
<p><code>target = [1990, 1991, 1992, 1993, 1994]</code></p>
<p>以及数据帧<code>stnYrs</code>作为</p>
<pre><code>STATION YEARS
A [1990,1994,1995,1996,1998,2000]
B [1992,1995,2001]
C [1988,1989]
</code></pre>
<p>我想在<code>stnYrs</code>中创建一个新的<code>NYEAR</code>列,作为<code>target</code>中<code>YEARS</code>列中的匹配年数。Python式的方法是什么?
结果应该是这样的</p>
<pre><code>STATION YEARS NYEAR
A [1990,1994,1995,1996,1998,2000] 2
B [1992,1995,2001] 1
C [1988,1989] 0
</code></pre>
<p>编辑1-</p>
<p>我尝试了Chris和YO建议的方法。如果我使用<code>target</code>和<code>stnYrs</code>的测试示例,这两种方法都可以工作。然而,在我的实际应用中,两人都没有给出正确的答案。我总是为<code>NYEAR</code>得到零。我只是不知道为什么。以下是我的代码中的行:</p>
<pre><code>stnYrs = pd.read_csv('isd_stnNyr_duOnly.txt',dtype={'STATION':'str'})
periods = [(1971,1980),(1981,1990),(1991,2000),(2001,2010)]
for iperd, perd in enumerate(periods):
ybgn, yend = perd
target = list(range(ybgn,yend+1))
stnYrs['NYEAR'] = stnYrs['YEARS'].apply(lambda x: sum(1 for yr in x if yr in target))
...
</code></pre>
<p><code>stnYrs[['STATION','YEARS','NYEAR']].head()</code>给出</p>
<blockquote>
<p>STATION YEARS NYEAR<br/>
0 78982099999 [1959, 1960, 1974, 1975, 1976...] 0</p>
<p>1 69205499999 na 0</p>
<p>2 40941099999 [1976, 1977, 1978] 0</p>
<p>3 40942099999 [1976, 1977, 1978, 1979, 1980...] 0</p>
</blockquote>
<p><code>isd_stnNyr_duOnly.txt</code>文件如下所示</p>
<blockquote>
<p>STATION,COUNTRY,GROUP,SOURCE,LAT,LON,ELEVATION,YEARS
78982099999,AA,SAM,4,12.501,-70.015,18.28,"[1959, 1960, 1974, 1975,
1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986,
1987, 1988, 1989, 1990, 1991, 1993, 1997, 1998, 1999, 2000, 2001,
2004, 2008]"</p>
<p>69205499999,AF,SAS,4,32.8,67.633,1989.0,na</p>
<p>40941099999,AF,SAS,4,34.883,65.3,2070.0,"[1976, 1977, 1978]"</p>
<p>40942099999,AF,SAS,4,33.533,65.267,2183.0,"[1976, 1977, 1978, 1979, 1980, 1981, 1983, 1984, 2010, 2019]"</p>
</blockquote>
<p>编辑2-</p>
<p>我终于想出了如何将<code>YEARS</code>列转换为列表</p>
<p><code>def clean(seq_string):
return list(map(int, seq_string.strip("[]").split(',')))</code></p>
<p><code>stnrec = pd.read_csv('isd_stnNyr_duOnly.txt',dtype={'STATION':'str'},converters={'YEARS': clean})</code></p>