基于少量约束的数据集扩展

时间:2019-10-23 08:29:57

标签: python r pandas numpy

编辑:

我有一个包含以下字段的数据框

I_Code Date_1   Date_2  Count real_Count
4   01/09/2019  02/08/2019  112 1
4   01/09/2019  03/08/2019  178 3
1   01/09/2019  04/08/2019  174 6
4   01/09/2019  04/08/2019  174 6
1   01/09/2019  05/08/2019  194 8
4   01/09/2019  05/08/2019  194 8
1   01/09/2019  06/08/2019  195 8
2   01/09/2019  06/08/2019  195 8
4   01/09/2019  07/08/2019  208 10
1   01/09/2019  08/08/2019  183 14
2   01/09/2019  08/08/2019  183 14
4   01/09/2019  08/08/2019  183 14
1   01/09/2019  09/08/2019  213 17
4   01/09/2019  09/08/2019  213 17
1   01/09/2019  10/08/2019  213 14

real_count代表数据帧中date_2的计数,此处的count列指的是我要在扩展中实现的date_2的频率计数。我要扩展数据框以使date_2出现到总数。 date_2有多个条目,这些条目受date_1和I_code约束。

1   01/09/2019  08/08/2019  183
2   01/09/2019  08/08/2019  183
4   01/09/2019  08/08/2019  183

此处的date_2相同,但I_code不同。

示例:

让我们说date_2 = 08/08/2019共有3个条目。然后在扩展时,我们需要在数据帧中获取183个条目,每个条目具有相等的条目,即183/3。

任何人都可以帮忙。

1 个答案:

答案 0 :(得分:0)

您可以在.max(axis=1)的结果上使用.nunique(),以获取每个 Date_2 值的最大唯一值数(跨所有其他列)。

然后给所得的Series一个名称,并将其与原始数据框重新连接。

df.join(df.groupby('Date_2').nunique().max(axis=1).rename('Date_2_Count'), on='Date_2')

I_Code      Date_1      Date_2  Count  real_Count  Date_2_Count
     4  01/09/2019  02/08/2019    112           1             1
     4  01/09/2019  03/08/2019    178           3             1
     1  01/09/2019  04/08/2019    174           6             2
     4  01/09/2019  04/08/2019    174           6             2
     1  01/09/2019  05/08/2019    194           8             2
     4  01/09/2019  05/08/2019    194           8             2
     1  01/09/2019  06/08/2019    195           8             2
     2  01/09/2019  06/08/2019    195           8             2
     4  01/09/2019  07/08/2019    208          10             1
     1  01/09/2019  08/08/2019    183          14             3
     2  01/09/2019  08/08/2019    183          14             3
     4  01/09/2019  08/08/2019    183          14             3
     1  01/09/2019  09/08/2019    213          17             2
     4  01/09/2019  09/08/2019    213          17             2
     1  01/09/2019  10/08/2019    213          14             1