我想创建一列C(基于B),该列对B(或通常的数据帧)中4个条目系列的每个开始进行计数。我有以下熊猫数据框:
A B
1 100
2 102
3 103
4 104
5 105
6 106
7 108
8 109
9 110
10 112
11 113
12 115
13 116
14 118
15 120
16 121
我要创建以下C列:
A C
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 2
9 3
10 3
11 3
12 3
13 4
14 4
15 4
16 4
C列应统计数据帧的每个系列4个条目。
谢谢。
答案 0 :(得分:2)
使用:
df['C'] = df.index // 4 + 1
鉴于您的数据框相当简单,可以假设您拥有一个RangeIndex对象的通用索引。
在您的示例中,它看起来像这样:
df.index
#RangeIndex(start=0, stop=16, step=1)
该索引的值如下:
df.index.values
#array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], dtype=int64)
使用以下公式将此类数组转换为所需的输出:
x // 4 + 1
//
是floor division使用的运算符。
答案 1 :(得分:1)
一般的解决方案是通过np.arange
创建numpy数组,然后使用4
进行整数除法并添加1
,因为python从0
开始计数:
df['C'] = np.arange(len(df)) // 4 + 1
print (df)
A B C
0 1 100 1
1 2 102 1
2 3 103 1
3 4 104 1
4 5 105 2
5 6 106 2
6 7 108 2
7 8 109 2
8 9 110 3
9 10 112 3
10 11 113 3
11 12 115 3
12 13 116 4
13 14 118 4
14 15 120 4
15 16 121 4