数据框添加列:具有条件的行数

时间:2019-06-17 08:51:58

标签: python dataframe

我在python中有一个数据框(df),其中有2列:ID和日期。

<YAxis tick={<CustomYAxisTick />} />

我正尝试在数据框中添加一列,其中包含ID与当前行的ID匹配且Date <=当前行的日期的行数。   如下所示:

| ID            | Date          |
| ------------- |:-------------:|
| 1             | 06-14-2019    |
| 1             | 06-10-2019    |
| 2             | 06-16-2019    |
| 3             | 06-12-2019    |
| 3             | 06-12-2019    |  

我尝试过类似的操作:

| ID            | Date          | Count         |
| ------------- |:-------------:|:-------------:|
| 1             | 06-14-2019    | 2             |
| 1             | 06-10-2019    | 1             |
| 2             | 06-16-2019    | 1             |
| 3             | 06-12-2019    | 2             |
| 3             | 06-12-2019    | 2             |  

这将导致以下错误:
grouped = df.groupby(['ID']) df['count'] = df.apply(lambda row: grouped.get_group[row['ID']][grouped.get_group(row['ID'])['Date'] < row['Date']]['ID'].size, axis=1)

欢迎提出建议

我忘了提及:
我的实际数据帧包含将近400万行,因此我正在寻找一种智能,快速的解决方案,并且无需花费很长时间即可运行

1 个答案:

答案 0 :(得分:0)

使用df.iterrows()

df['Count'] = None
for idx, value in df.iterrows():
    df.iloc[idx, -1 ] = len(df[(df.ID == value[0]) & (df.Date <= value[1])].index)

输出:

+---+----+------------+-------+
|   | ID |    Date    | Count |
+---+----+------------+-------+
| 0 |  1 | 06-14-2019 |     2 |
| 1 |  1 | 06-10-2019 |     1 |
| 2 |  2 | 06-16-2019 |     1 |
| 3 |  3 | 06-12-2019 |     2 |
| 4 |  3 | 06-12-2019 |     2 |
+---+----+------------+-------+