基于列中的值生成列表

2024-04-25 05:39:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个有趣的案子。在FID2列中,我有一些值,我想根据每个值创建一个列表。列Ncircles确定列表。 例如:

  • 如果Ncircles中有一个值0,我想基于FID2中的值创建一个列表,该值与[i]位于同一行,其中i等于FID2。你知道吗
  • 如果在Ncircles中有一个值1,我想创建一个基于 与[i-1, i, i +1]位于同一行的FID2中的值,其中i等于FID2。你知道吗
  • 如果在Ncircles中有一个值3,我想创建一个基于 与[i-3, i-2, i -1 i, i+1, i+2, i +3]位于同一行的FID2中的值,其中i等于FID2。你知道吗

这是df的一个例子:

          FID2  Ncircles
0        50141         0
1        56188         1
2        75035         0
3        94937         3

最终的清单可以写在同一个清单上。你对此有什么建议吗?你知道吗

预期的输出将是一个新列表:

Newlist = [50141, 56187, 56188, 56188, 75035, 94934, 94935, 94936, 94937, 94938, 94939, 94940]

Tags: df列表建议例子案子newlistfid2ncircles
2条回答

使用“应用”的方法:

def create_list(ncircles, fid2):
    return [fid2 + k for k in range(-ncircles, ncircles+1)]

df['fid2list'] = df.apply(axis=1, func=lambda l: create_list(l.Ncircles, l.FID2))

    FID2  Ncircles                                           fid2list
0  50141         0                                            [50141]
1  56188         1                              [56187, 56188, 56189]
2  75035         0                                            [75035]
3  94937         3  [94934, 94935, 94936, 94937, 94938, 94939, 94940]

列表可以与np.concatenate(df['fid2list'].values)组合:

array([50141, 56187, 56188, 56189, 75035, 94934, 94935, 94936, 94937,
   94938, 94939, 94940])

在列表理解中使用range和展平:

Newlist = [c for a, b in zip(df['FID2'], df['Ncircles']) for c in range(a-b, a+b+1)]
print (Newlist)
[50141, 56187, 56188, 56189, 75035, 94934, 94935, 94936, 94937, 94938, 94939, 94940]

相关问题 更多 >