pandas 如何向具有重复值序列的 Dataframe 添加列?

gv8xihay  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(133)

对 Dataframe 说:

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)
r9f1avp5

r9f1avp51#

    • 设置**

考虑Pandas Dataframe 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
    • 解决方案**

尝试使用模

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
wswtfjt7

wswtfjt72#

利用@piRsquared的数据,

df['new'] = 0
np.put(df['new'], np.arange(len(df)), [1,2,3,4,5])

df现在是:

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
wh6knrhe

wh6knrhe3#

    • 备选案文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

相关问题