我有一个有趣的案例。在FID2
列中,有一些值,基于每个值我都想创建一个列表。 Ncircles
列确定列表。
例如:
0
中有一个值Ncircles
,我想根据FID2
中与[i]
在同一行中的值创建一个列表,其中{ {1}}等于i
。FID2
中有一个值1
,我想创建一个基于
Ncircles
与FID2
在同一行中的值,其中[i-1, i, i +1]
等于i
。FID2
中有一个值3
,我想创建一个基于
Ncircles
与FID2
在同一行中的值,其中[i-3, i-2, i -1 i, i+1, i+2, i +3]
等于i
。这是df的示例:
FID2
最终列表可以全部写在一个列表中。您对如何执行此操作有任何建议吗?
预期的输出将是一个新列表:
FID2 Ncircles
0 50141 0
1 56188 1
2 75035 0
3 94937 3
答案 0 :(得分:4)
在列表理解中使用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]
答案 1 :(得分:3)
使用Apply的方法:
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])