大熊猫df行数

时间:2015-04-14 22:33:58

标签: pandas

         Date  Ct
0  2015-04-01   1
1  2015-04-01   2
2  2015-04-01   3
3  2015-04-01   4
4  2015-04-02   1
5  2015-04-02   2
6  2015-04-02   3
7  2015-04-02   4
8  2015-04-03   1
9  2015-04-03   2
10 2015-04-03   3
11 2015-04-03   4
12 2015-04-04   1
13 2015-04-04   2
14 2015-04-04   3
15 2015-04-04   4

我有一个字符串列'日期'我想创造一个' Ct'如下所示的列,用于维护特定日期的行数。日期需要是我的应用程序中的字符串,每个日期的行数并不总是相同,并且< Ct'将始终按数字索引的顺序计数。非常感谢正确方向的回答或推动。

1 个答案:

答案 0 :(得分:0)

好的,这有点奇怪,但您可以添加临时列并将此值设置为1:

df['temp'] = 1

然后,您可以在“日期”中执行分组。并在“临时”电话上拨打transform用于执行计数的列:

In [80]:

df['Ct'] = df.groupby('Date')['temp'].transform(pd.Series.cumsum)
df
Out[80]:
         Date  temp  Ct
0  2015-04-01     1   1
1  2015-04-01     1   2
2  2015-04-01     1   3
3  2015-04-01     1   4
4  2015-04-02     1   1
5  2015-04-02     1   2
6  2015-04-02     1   3
7  2015-04-02     1   4
8  2015-04-03     1   1
9  2015-04-03     1   2
10 2015-04-03     1   3
11 2015-04-03     1   4
12 2015-04-04     1   1
13 2015-04-04     1   2
14 2015-04-04     1   3
15 2015-04-04     1   4
In [81]:

df.drop('temp',axis=1,inplace=True)
df
Out[81]:
         Date  Ct
0  2015-04-01   1
1  2015-04-01   2
2  2015-04-01   3
3  2015-04-01   4
4  2015-04-02   1
5  2015-04-02   2
6  2015-04-02   3
7  2015-04-02   4
8  2015-04-03   1
9  2015-04-03   2
10 2015-04-03   3
11 2015-04-03   4
12 2015-04-04   1
13 2015-04-04   2
14 2015-04-04   3
15 2015-04-04   4

我们之所以不能说,请在“约会”日期'上执行cumsum。列是因为如果它是一个字符串,那么这将导致你的日期字符串彼此连接,这不是你想要的。

修改

感谢主人@Jeff指出临时列是不必要的,你只需使用cumcount

In [150]:

df['Ct'] = df.groupby('Date').cumcount() + 1
df
Out[150]:
          Date  Ct
0   2015-04-01   1
1   2015-04-01   2
2   2015-04-01   3
3   2015-04-01   4
4   2015-04-02   1
5   2015-04-02   2
6   2015-04-02   3
7   2015-04-02   4
8   2015-04-03   1
9   2015-04-03   2
10  2015-04-03   3
11  2015-04-03   4
12  2015-04-04   1
13  2015-04-04   2
14  2015-04-04   3
15  2015-04-04   4