我想在熊猫中创建一个新的列,该列会增加一个包含特定数据(x列)的每5行,如下面的
1
1
1
1
1
2
2
2
2
2
3
另一个选项:
df['new'] = df.index / 5
使用Odd 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
,但是由于某种原因,您无法移动df.index
(可能是一个很好的理由!)
您可以将numpy.repeat
与索引使用,而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
这是唯一的解决方案,可用于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