嗨,新年快乐:)
我在 SQLite3 中有一个数据库,其中 ID 是主键,如果添加了具有相同 ID 号的新行,它将用新资料替换该行。但是,如果 Target 为空,则为此生成 CSV 档案的程序会放入 ID 0。问题是如果有几行 ID 为 0,则数据库中将只有一行,因为如果有几行,它会替换 ID。当我从数据库中查询资料时,这会在我的应用程序中产生问题,因为我必须有两个目标,1 和 2 来自具有相同编号的中继。我想要做的是每个带有0的ID都必须转换为1000到2000之间的随机整数,并且该随机数不能生成两次。
我试过df.loc[df['ID'] == 0,'ID'] = df['ID'].apply(lambda x: np.random.normal(0,1))
df,但这只会随机浮动,我不能使用它。
我该如何解决这个问题?预先感谢您的回答:)
LeonID Relay Target ... Klasse Fyll ID
0 2 1 1 ... 3 0 210
1 2 1 2 ... NaN 0 0
2 2 2 1 ... V55 0 208
3 2 2 2 ... 2 0 211
4 2 3 1 ... V55 0 209
5 2 3 2 ... KIK 0 226
6 2 4 1 ... 4 0 218
7 2 4 2 ... 4 0 212
8 2 5 1 ... NaN 0 0
9 2 5 2 ... 2 0 220
10 2 6 1 ... 2 0 213
11 2 6 2 ... 2 0 225
12 2 7 1 ... EJ 0 219
13 2 7 2 ... 2 0 224
14 2 8 1 ... 2 0 221
15 2 8 2 ... 1 0 206
16 2 9 1 ... NaN 0 0
17 2 9 2 ... 4 0 216
18 2 10 1 ... 2 0 214
19 2 10 2 ... R 0 236
20 2 11 1 ... 4 0 215
21 2 11 2 ... 4 0 217
22 2 12 1 ... 4 0 207
23 2 12 2 ... EJ 0 205
24 2 13 1 ... 4 0 222
25 2 13 2 ... 2 0 223
uj5u.com热心网友回复:
df.loc[df['ID'] == 0, 'ID'] = \
df[['Relay', 'Target']].astype(str).apply(''.join, axis=1).astype(int)
print(df)
# Output
LeonID Relay Target ... Klasse Fyll ID
0 2 1 1 ... 3 0 210
1 2 1 2 ... NaN 0 12 # HERE
2 2 2 1 ... V55 0 208
3 2 2 2 ... 2 0 211
4 2 3 1 ... V55 0 209
5 2 3 2 ... KIK 0 226
6 2 4 1 ... 4 0 218
7 2 4 2 ... 4 0 212
8 2 5 1 ... NaN 0 51 # HERE
9 2 5 2 ... 2 0 220
10 2 6 1 ... 2 0 213
11 2 6 2 ... 2 0 225
12 2 7 1 ... EJ 0 219
13 2 7 2 ... 2 0 224
14 2 8 1 ... 2 0 221
15 2 8 2 ... 1 0 206
16 2 9 1 ... NaN 0 91 # HERE
17 2 9 2 ... 4 0 216
18 2 10 1 ... 2 0 214
19 2 10 2 ... R 0 236
20 2 11 1 ... 4 0 215
21 2 11 2 ... 4 0 217
22 2 12 1 ... 4 0 207
23 2 12 2 ... EJ 0 205
24 2 13 1 ... 4 0 222
25 2 13 2 ... 2 0 223
uj5u.com热心网友回复:
创建一个值在 1000-2000 范围内的系列,然后呼叫它的sample
方法得到你想要的。注意,sample
方法具有关键字自变量replace
是False
默认(其不允许采样同一行的多于一次)。
mask = df['ID'] == 0
df.loc[mask,'ID'] = pd.Series(range(1000,2000)).sample(mask.sum()).values
0 评论