拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何用python中资料帧中的随机整数替换0?

如何用python中资料帧中的随机整数替换0?

白鹭 - 2022-02-10 2136 0 0

嗨,新年快乐:)

我在 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方法具有关键字自变量replaceFalse默认(其不允许采样同一行的多于一次)。

mask = df['ID'] == 0
df.loc[mask,'ID'] = pd.Series(range(1000,2000)).sample(mask.sum()).values
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *