说出数据框:
Ind d1 d2 d3
0 x0 x0 x0
1 x1 x1 x1
2 x2 x2 x2
...
n xn xn xn
我想添加一个新列,以便重复1 2 3 4 5模式,直到达到n。即
Ind d1 d2 d3 d4
0 x0 x0 x0 1
1 x1 x1 x1 2
2 x2 x2 x2 3
3 x3 x3 x3 4
4 x4 x4 x4 5
5 x5 x5 x5 1
6 x6 x6 x6 2
...
n xn xn xn (1,2,3,4 or 5 depending on n)
答案 0 :(得分:4)
<强>设置强>
考虑一下Pandas数据框df
np.random.seed([3,1415])
df = pd.DataFrame(
np.random.choice(list('abcdefghij'), (12, 3)),
columns=['d1', 'd2', 'd3']
)
df
d1 d2 d3
0 a c h
1 d i h
2 a g i
3 g a c
4 a e j
5 h d c
6 e d d
7 g h h
8 e f d
9 h f j
10 i h g
11 e h g
<强>解决方案强>
尝试使用modulo
df.assign(d4=np.arange(len(df)) % 5 + 1)
d1 d2 d3 d4
0 a c h 1
1 d i h 2
2 a g i 3
3 g a c 4
4 a e j 5
5 h d c 1
6 e d d 2
7 g h h 3
8 e f d 4
9 h f j 5
10 i h g 1
11 e h g 2
扩展解决方案
容易申请重复任何事情。假设我有一个单词数组a
a = np.array(['one', 'six', 'foot', 'red', 'big'])
df.assign(d4=a[np.arange(len(df)) % len(a)])
d1 d2 d3 d4
0 a c h one
1 d i h six
2 a g i foot
3 g a c red
4 a e j big
5 h d c one
6 e d d six
7 g h h foot
8 e f d red
9 h f j big
10 i h g one
11 e h g six
答案 1 :(得分:4)
使用piR的数据。
df['new']=0
np.put(df['new'], np.arange(len(df)), [1,2,3,4,5])
df
Out[343]:
d1 d2 d3 new
0 i j i 1
1 a e a 2
2 d j i 3
3 i a a 4
4 c j d 5
5 i a h 1
6 h d c 2
7 a e a 3
8 a f i 4
9 a h f 5
10 d b d 1
11 b c c 2
答案 2 :(得分:2)
选项1
np.tile
:
df
A B C
0 13 11 2
1 8 8 6
2 7 6 13
3 13 16 4
4 3 1 3
5 2 27 9
6 20 1 2
7 5 3 9
8 0 10 1
9 1 7 4
np.tile(np.arange(1, 6), len(df) // 5 + 1)[:len(df)]
array([1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
将结果分配给一个列,您就可以了。
选项2
groupby
+ cumcount
:
df.groupby(df.index // 5 * 5).cumcount() + 1
0 1
1 2
2 3
3 4
4 5
5 1
6 2
7 3
8 4
9 5
dtype: int64