将值插入随机行

时间:2019-04-04 10:21:28

标签: pandas random

我有一个如下数据框。

D1 = pd.DataFrame({'a': [15, 22, 107, 120],
                   'b': [25, 21, 95, 110]})

我试图将两行随机添加到列“ b”中,以得到以下效果。在每种情况下,插入的0在这种情况下都将行向下移动一。

D1 = pd.DataFrame({'a': [15, 22, 107, 120, 0, 0],
                   'b': [0, 25, 21, 0, 95, 110]})

我所看到的一切都是关于插入整个列而不是单个行。

2 个答案:

答案 0 :(得分:3)

这是使用numpy.random.randintnumpy.insert来实现这一目标的一种潜在方法:

import numpy as np

n = 2
rand_idx = np.random.randint(0, len(D1), size=n)

# Append 'n' rows of zeroes to D1
D2 = D1.append(pd.DataFrame(np.zeros((n, D1.shape[1])), columns=D1.columns, dtype=int), ignore_index=True)

# Insert n zeroes into random indices and assign back to column 'b'
D2['b'] = np.insert(D1['b'].values, rand_idx, 0)
print(D2)

     a    b
0   15   25
1   22    0
2  107    0
3  120   21
4    0   95
5    0  110

答案 1 :(得分:2)

numpy.insert用于设置位置-随机用于a,对于原始位置b用于DataFrame

n = 2
new = np.zeros(n, dtype=int)
a = np.insert(D1['b'].values, len(D1), new)
b = np.insert(D1['a'].values, np.random.randint(0, len(D1), size=n), new)

#python 0.24+
#a = np.insert(D1['b'].to_numpy(), len(D1), new)
#b = np.insert(D1['a'].to_numpy(), np.random.randint(0, len(D1), size=n), new)

df = pd.DataFrame({'a':a, 'b': b})
print (df)
     a    b
0   25    0
1   21   15
2   95   22
3  110    0
4    0  107
5    0  120