[英]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的解決方案,可用於numpy
或pandas
:
>>> [(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.