簡體   English   中英

大熊貓:添加新列,每列增加一次

[英]pandas: add new column that increment every several rows

我想在熊貓中創建一個新列,每列包含特定數據(第X列)的每5行遞增,如下所示

1
1
1
1
1
2
2
2
2
2
3

您可以將numpy.repeat與index和loc用於重復多列:

注意-索引值必須唯一。

df = pd.DataFrame({'A':list('agb'),
                   'B':[4,5,4],
                   'C':[7,8,9]})

print (df)
   A  B  C
0  a  4  7
1  g  5  8
2  b  4  9

df = df.loc[df.index.repeat(5)].reset_index(drop=True)
print (df)
    A  B  C
0   a  4  7
1   a  4  7
2   a  4  7
3   a  4  7
4   a  4  7
5   g  5  8
6   g  5  8
7   g  5  8
8   g  5  8
9   g  5  8
10  b  4  9
11  b  4  9
12  b  4  9
13  b  4  9
14  b  4  9

如果只需要一列:

df = pd.DataFrame({'D': df.A.values.repeat(5)})
print (df)
    D
0   a
1   a
2   a
3   a
4   a
5   g
6   g
7   g
8   g
9   g
10  b
11  b
12  b
13  b
14  b

這是僅python的解決方案,可用於numpypandas

>>> [(x+1) for x in range(3) for _ in range(5)]
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]

舉個例子:

>>> import pandas as pd
>>> pd.DataFrame([(x+1) for x in range(3) for _ in range(5)])
    0
0   1
1   1
2   1
3   1
4   1
5   2
6   2
7   2
8   2
9   2
10  3
11  3
12  3
13  3
14  3

另外一個選項:

df['new'] = df.index / 5

使用奇數python 2除法來建立索引。 (我敢肯定有一種方法可以類似地在3中做到這一點嗎?)

編輯:

df['new'] = df.index / 5 + 1

可以為您提供1而不是0的值

python 3感謝BusyBee:

df['new']= (df.index / 5 + 1).astype(int)

如果要從第x行開始:

import pandas as pd

df = pd.DataFrame({'data': range(50)}, columns=['data'])

x = 23

df['two'] = None

df.loc[x:, 'two'] = df.index[x:] / 5 +1

print df

如果要從x開始,然后從1開始數字,則需要減去x

df.loc[x:, 'two'] = (df.index[x:] - x) / 5 +1

但我不確定這是否是最好的方法。

您可以在應用.shift后使用.shift ,但由於某些原因您無法移動df.index (可能是一個很好的原因!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM