PANDAS:添加新列,每行每几行增加



我想在熊猫中创建一个新的列,该列会增加一个包含特定数据(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

这是唯一的解决方案,可用于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

最新更新