在pandas数据框架列中添加多个常量值



我想知道如何将不同长度的多个常数值添加到数据框列中。我知道我们可以像这样在数据帧列' a '中添加单个常量值(例如:5):

df['A'] = 5

但是我想让数据帧类似于下面的表。如你所见,我需要3张5分,2张10分,6张30分和1张100分。你怎么能做到这一点,也许10000行与一组值(不是随机的),每个有一个用户定义的频率。

<表类>指数tbody><<tr>1525354105106307308309301030113012100

您可以将numpy.repeat与DataFrame构造函数一起使用:

vals = [5,10,30,100]
reps = [3,2,6,1]
df = pd.DataFrame({'A': np.repeat(vals, reps)})
df.index+=1

输出:

A
1     5
2     5
3     5
4    10
5    10
6    30
7    30
8    30
9    30
10   30
11   30
12  100

你可以直接使用:

df['b'] = np.repeat([5, 5, 5, 10, 10, 30, 30, 30, 30, 30, 30, 100], np.ceil(len(df) / 12))[:len(df)]

或:

df['b'] = np.repeat([*[5] * 3, *[10] * 2, *[30] * 6, 100], np.ceil(len(df) / 12))[:len(df)]

试试这个:

import itertools
value  = [5,10,30,100]
repeat = [3,2,6,1]
lst = [([v]*r) for v,r in zip(value,repeat)]
merged = list(itertools.chain(*lst))
df = pd.DataFrame({'A':merged})
df

输出:

A
0     5
1     5
2     5
3    10
4    10
5    30
6    30
7    30
8    30
9    30
10   30
11  100

您可以在字典中指定值和重复,并使用:

d = {3:5, 2:10, 6:30, 1:100}
df = pd.DataFrame({'A': [x for k, v in d.items() for x in [v] * k]})
print (df)
A
0     5
1     5
2     5
3    10
4    10
5    30
6    30
7    30
8    30
9    30
10   30
11  100

带字典和numpy.repeat的解:

df = pd.DataFrame({'A': np.repeat(list(d.values()), list(d.keys()))})
print (df)
A
0     5
1     5
2     5
3    10
4    10
5    30
6    30
7    30
8    30
9    30
10   30
11  100

最新更新