我在 python 中处理不同的数据帧。第一个名为 cities 的数据框如下所示:
city Population NBA
0 New York City 20153634 Knicks Nets
1 Los Angeles 13310447 Lakers Clippers
2 San Francisco Bay Area 6657982 Warriors
3 Chicago 9512999 Bulls[note 9]
4 Dallas–Fort Worth 7233323 Mavericks
第二个名为 nba_df 的数据框如下所示:
team W L W/L% GB PS/G PA/G SRS year League
0 Toronto Raptors 59 23 0.720 0.0 111.7 103.9 7.29 2018 NBA
1 Boston Celtics 55 27 0.671 4.0 104.0 100.4 3.23 2018 NBA
2 Philadelphia 76ers 52 30 0.634 7.0 109.8 105.3 4.30 2018 NBA
3 Cleveland Cavaliers 50 32 0.610 9.0 110.9 109.9 0.59 2018 NBA
4 Indiana Pacers 48 34 0.585 11.0 105.6 104.2 1.18 2018 NBA
我想做的是根据团队名称确定团队所在的位置。对于前。费城 76 人队位于费城。为此,我在下面写了一个嵌套循环:
city = []
for i in nba_df['team']:
added = False
for j in i.split():
for k in cities['city']:
for l in k.split():
if j == l and added == False:
city.append(k)
added = True
if added == False:
city.append('Not in list')
nba_df['city'] = city
循环遍历 nba_df['team'] 并拆分字符串并迭代 cities['city'] 列上的每个单词,这些列也被拆分,如果一个单词与另一个匹配,那么城市名称将是添加到列表中。否则它将被添加为不在列表中。我知道它有一些错误,如果在以新奥尔良为例之前迭代纽约市会发生什么?它将纽约市添加到列表中并跳过其余部分。所以它可能会附加错误的城市。不管怎样,代码做我想做的,但我想用列表理解来写它。因为它对我来说看起来很业余。 我试过这样的事情:
city = [k if j == l for l in k.split() in [k for k in cities['city'] in [j for j in i.split() in [i for i in nba_df['team']]]]]
但是当然没用。它在开头的
l for l
上引发了 sytanx 错误指向。
我要求你检查我的循环,我想知道你会如何重写它?列表理解或其他方式。你将如何解决这个问题?
谢谢。
你忘记了列表理解中第一个 split() 的大括号。
试试这个:
city = [k if j == l for l in k.split() in [k for k in cities['city'] in [j for j in i.split() in [i for i in nba_df['team']]]]]
而不是这个:
city = [k if j == l for l in k.split in [k for k in cities['city'] in [j for j in i.split() in [i for i in nba_df['team']]]]]