我有一个名为cohort_table
的数据帧表:
CohortPeriod 2009-01 2009-02 2009-03 2009-04 2009-05 2009-06 2009-07 2009-08 2009-09 2009-10 2009-11 2009-12 2010-01 2010-02
1 1 22 15 13 39 50 32 50 31 37 54 130 65 95 100
2 2 8 3 4 13 13 15 23 11 15 17 32 17 50 19
3 3 10 5 5 10 12 9 13 9 14 12 26 18 26 NA
4 4 9 1 4 13 5 6 10 7 8 13 29 7 NA NA
5 5 10 4 1 6 4 7 11 6 13 13 13 NA NA NA
6 6 8 4 2 7 6 5 10 8 9 7 NA NA NA NA
7 7 8 4 2 4 3 3 11 4 8 NA NA NA NA NA
8 8 7 5 3 6 5 3 7 4 NA NA NA NA NA NA
9 9 7 5 2 2 5 10 7 NA NA NA NA NA NA NA
10 10 7 4 1 4 4 3 NA NA NA NA NA NA NA NA
11 11 7 3 3 3 3 NA NA NA NA NA NA NA NA NA
12 12 8 3 2 2 NA NA NA NA NA NA NA NA NA NA
13 13 11 5 1 NA NA NA NA NA NA NA NA NA NA NA
14 14 7 NA NA NA NA NA NA NA NA NA NA NA NA NA
15 15 6 NA NA NA NA NA NA NA NA NA NA NA NA NA
2010-03
1 24
2 NA
3 NA
4 NA
5 NA
6 NA
7 NA
8 NA
9 NA
10 NA
11 NA
12 NA
13 NA
14 NA
15 NA
我有另一个名为cohort_group_size
的数据框:
# A tibble: 15 x 2
# Groups: CohortGroup [15]
CohortGroup InitialGroupSize
<chr> <int>
1 2009-01 22
2 2009-02 15
3 2009-03 13
4 2009-04 39
5 2009-05 50
6 2009-06 32
7 2009-07 50
8 2009-08 31
9 2009-09 37
10 2009-10 54
11 2009-11 130
12 2009-12 65
13 2010-01 95
14 2010-02 100
15 2010-03 24
基本上,我试图将cohort_table
除以cohort_group_size
。请注意,cohort_group_size
CohortGroup列与cohort_table
的标题具有相同的标签。
例如,2009-01的InitialGroupSize为22.我想取22并将整个列2009-01在cohort_table
中除以22.等等,每个列都是如此。
在Python Pandas中,存在索引的概念,所以当cohort_group_size
是Pandas系列时我可以执行以下操作:
cohort_table / cohort_group_size
CohortGroup 2009-01 2009-02 2009-03 2009-04 2009-05 2009-06 \
CohortPeriod
1 1.000000 1.000000 1.000000 1.000000 1.00 1.00000
2 0.363636 0.200000 0.307692 0.333333 0.26 0.46875
3 0.454545 0.333333 0.384615 0.256410 0.24 0.28125
4 0.409091 0.066667 0.307692 0.333333 0.10 0.18750
5 0.454545 0.266667 0.076923 0.153846 0.08 0.21875
6 0.363636 0.266667 0.153846 0.179487 0.12 0.15625
7 0.363636 0.266667 0.153846 0.102564 0.06 0.09375
8 0.318182 0.333333 0.230769 0.153846 0.10 0.09375
9 0.318182 0.333333 0.153846 0.051282 0.10 0.31250
10 0.318182 0.266667 0.076923 0.102564 0.08 0.09375
11 0.318182 0.200000 0.230769 0.076923 0.06 NaN
12 0.363636 0.200000 0.153846 0.051282 NaN NaN
13 0.500000 0.333333 0.076923 NaN NaN NaN
14 0.318182 NaN NaN NaN NaN NaN
15 0.272727 NaN NaN NaN NaN NaN
CohortGroup 2009-07 2009-08 2009-09 2009-10 2009-11 2009-12 \
CohortPeriod
1 1.00 1.000000 1.000000 1.000000 1.000000 1.000000
2 0.46 0.354839 0.405405 0.314815 0.246154 0.261538
3 0.26 0.290323 0.378378 0.222222 0.200000 0.276923
4 0.20 0.225806 0.216216 0.240741 0.223077 0.107692
5 0.22 0.193548 0.351351 0.240741 0.100000 NaN
6 0.20 0.258065 0.243243 0.129630 NaN NaN
7 0.22 0.129032 0.216216 NaN NaN NaN
8 0.14 0.129032 NaN NaN NaN NaN
9 0.14 NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN
14 NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN
CohortGroup 2010-01 2010-02 2010-03
CohortPeriod
1 1.000000 1.00 1.0
2 0.526316 0.19 NaN
3 0.273684 NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN
10 NaN NaN NaN
11 NaN NaN NaN
12 NaN NaN NaN
13 NaN NaN NaN
14 NaN NaN NaN
15 NaN NaN NaN
上面的表格是所需的输出。来自Python,没有使用Indices,我不确定如何将系列/向量中的除法应用于数据帧,尤其是在这种情况下,因为列名称跨越标题,并且此数据框包含要从除法中排除的列{ {1}}。
答案 0 :(得分:1)
以下是一个在readData.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Thread readValThread = new Thread(readValDaemon);
readValThread.setDaemon(true);
readValThread.start();
}
});
中使用的非常相似的方法示例:
R
那就是说,这不是一种非常“# Create a dataframe from the example provided
cohort_table <- read.table(text = " CohortPeriod 2009-01 2009-02 2009-03 2009-04 2009-05 2009-06 2009-07 2009-08 2009-09 2009-10 2009-11 2009-12 2010-01 2010-02 2010-03
1 1 22 15 13 39 50 32 50 31 37 54 130 65 95 100 24
2 2 8 3 4 13 13 15 23 11 15 17 32 17 50 19 NA
3 3 10 5 5 10 12 9 13 9 14 12 26 18 26 NA NA
4 4 9 1 4 13 5 6 10 7 8 13 29 7 NA NA NA
5 5 10 4 1 6 4 7 11 6 13 13 13 NA NA NA NA
6 6 8 4 2 7 6 5 10 8 9 7 NA NA NA NA NA
7 7 8 4 2 4 3 3 11 4 8 NA NA NA NA NA NA
8 8 7 5 3 6 5 3 7 4 NA NA NA NA NA NA NA
9 9 7 5 2 2 5 10 7 NA NA NA NA NA NA NA NA
10 10 7 4 1 4 4 3 NA NA NA NA NA NA NA NA NA
11 11 7 3 3 3 3 NA NA NA NA NA NA NA NA NA NA
12 12 8 3 2 2 NA NA NA NA NA NA NA NA NA NA NA
13 13 11 5 1 NA NA NA NA NA NA NA NA NA NA NA NA
14 14 7 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
15 15 6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA")
# Setup column names to match the example. Note that R dislikes '-' in names
# and that names should not start with a number. You can, however, force it
# for the sake of making them match.
colnames(cohort_table) <- gsub("X", "", colnames(cohort_table))
colnames(cohort_table) <- gsub("[.]", "-", colnames(cohort_table))
rownames(cohort_table) <- cohort_table$CohortPeriod
# Create a dataframe from the example provided
cohort_group <- read.table(text = " CohortGroup InitialGroupSize
1 2009-01 22
2 2009-02 15
3 2009-03 13
4 2009-04 39
5 2009-05 50
6 2009-06 32
7 2009-07 50
8 2009-08 31
9 2009-09 37
10 2009-10 54
11 2009-11 130
12 2009-12 65
13 2010-01 95
14 2010-02 100
15 2010-03 24")
# IMPORTANT: set up the rownames of the cohort_group to match the month
# This means that you can index the df based on the month, matching the
# rownames: e.g. cohort_group["2009-01",]
rownames(cohort_group) <- cohort_group$CohortGroup
# R will divide vectors rowwise, so transpose the cohort_table
# divide by the vector of values (cohort_group$InitialGroupSize)
# then transpose back into a table. Note that this requires the
# columns in cohort_table to be in the same order as the rows of
# cohort_group.
t(t(cohort_table) / cohort_group$InitialGroupSize)
#> CohortPeriod 2009-01 2009-02 2009-03 2009-04 2009-05
#> 1 0.04545455 1.46666667 1.15384615 0.33333333 0.78000000 1.56250000
#> 2 0.13333333 0.61538462 0.07692308 0.08000000 0.40625000 0.26000000
#> 3 0.23076923 0.25641026 0.10000000 0.15625000 0.20000000 0.38709677
#> 4 0.10256410 0.18000000 0.03125000 0.08000000 0.41935484 0.13513514
#> 5 0.10000000 0.31250000 0.08000000 0.03225806 0.16216216 0.07407407
#> 6 0.18750000 0.16000000 0.12903226 0.05405405 0.12962963 0.04615385
#> 7 0.14000000 0.25806452 0.10810811 0.03703704 0.03076923 0.04615385
#> 8 0.25806452 0.18918919 0.09259259 0.02307692 0.09230769 0.05263158
#> 9 0.24324324 0.12962963 0.03846154 0.03076923 0.02105263 0.05000000
#> 10 0.18518519 0.05384615 0.06153846 0.01052632 0.04000000 0.16666667
#> 11 0.08461538 0.10769231 0.03157895 0.03000000 0.12500000 0.13636364
#> 12 0.18461538 0.08421053 0.03000000 0.08333333 0.09090909 NA
#> 13 0.13684211 0.11000000 0.20833333 0.04545455 NA NA
#> 14 0.14000000 0.29166667 NA NA NA NA
#> 15 0.62500000 0.27272727 NA NA NA NA
#> 2009-06 2009-07 2009-08 2009-09 2009-10 2009-11
#> 1 0.64000000 1.61290323 0.83783784 0.68518519 0.4153846 2.0000000
#> 2 0.48387097 0.62162162 0.20370370 0.11538462 0.2615385 0.3368421
#> 3 0.24324324 0.24074074 0.06923077 0.21538462 0.1263158 0.2600000
#> 4 0.11111111 0.07692308 0.10769231 0.08421053 0.1300000 1.2083333
#> 5 0.05384615 0.16923077 0.06315789 0.13000000 0.5416667 0.5909091
#> 6 0.07692308 0.10526316 0.08000000 0.37500000 0.3181818 NA
#> 7 0.03157895 0.11000000 0.16666667 0.36363636 NA NA
#> 8 0.03000000 0.29166667 0.18181818 NA NA NA
#> 9 0.41666667 0.31818182 NA NA NA NA
#> 10 0.13636364 NA NA NA NA NA
#> 11 NA NA NA NA NA NA
#> 12 NA NA NA NA NA NA
#> 13 NA NA NA NA NA NA
#> 14 NA NA NA NA NA NA
#> 15 NA NA NA NA NA NA
#> 2009-12 2010-01 2010-02 2010-03
#> 1 0.6842105 0.950000 4.1666667 1.090909
#> 2 0.1700000 2.083333 0.8636364 NA
#> 3 0.7500000 1.181818 NA NA
#> 4 0.3181818 NA NA NA
#> 5 NA NA NA NA
#> 6 NA NA NA NA
#> 7 NA NA NA NA
#> 8 NA NA NA NA
#> 9 NA NA NA NA
#> 10 NA NA NA NA
#> 11 NA NA NA NA
#> 12 NA NA NA NA
#> 13 NA NA NA NA
#> 14 NA NA NA NA
#> 15 NA NA NA NA
# If you aren't sure that the columns and rows will match exactly
# then you can reorder cohort_group by indexing it on the column names
# of cohort_table. Any column that doesn't have a correspoing row in
# cohort group will be divided by NA and so be all NA.
t(t(cohort_table) / cohort_group[colnames(cohort_table), "InitialGroupSize"])
#> CohortPeriod 2009-01 2009-02 2009-03 2009-04 2009-05 2009-06
#> 1 NA 1.0000000 1.00000000 1.00000000 1.00000000 1.00 1.00000
#> 2 NA 0.3636364 0.20000000 0.30769231 0.33333333 0.26 0.46875
#> 3 NA 0.4545455 0.33333333 0.38461538 0.25641026 0.24 0.28125
#> 4 NA 0.4090909 0.06666667 0.30769231 0.33333333 0.10 0.18750
#> 5 NA 0.4545455 0.26666667 0.07692308 0.15384615 0.08 0.21875
#> 6 NA 0.3636364 0.26666667 0.15384615 0.17948718 0.12 0.15625
#> 7 NA 0.3636364 0.26666667 0.15384615 0.10256410 0.06 0.09375
#> 8 NA 0.3181818 0.33333333 0.23076923 0.15384615 0.10 0.09375
#> 9 NA 0.3181818 0.33333333 0.15384615 0.05128205 0.10 0.31250
#> 10 NA 0.3181818 0.26666667 0.07692308 0.10256410 0.08 0.09375
#> 11 NA 0.3181818 0.20000000 0.23076923 0.07692308 0.06 NA
#> 12 NA 0.3636364 0.20000000 0.15384615 0.05128205 NA NA
#> 13 NA 0.5000000 0.33333333 0.07692308 NA NA NA
#> 14 NA 0.3181818 NA NA NA NA NA
#> 15 NA 0.2727273 NA NA NA NA NA
#> 2009-07 2009-08 2009-09 2009-10 2009-11 2009-12 2010-01
#> 1 1.00 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
#> 2 0.46 0.3548387 0.4054054 0.3148148 0.2461538 0.2615385 0.5263158
#> 3 0.26 0.2903226 0.3783784 0.2222222 0.2000000 0.2769231 0.2736842
#> 4 0.20 0.2258065 0.2162162 0.2407407 0.2230769 0.1076923 NA
#> 5 0.22 0.1935484 0.3513514 0.2407407 0.1000000 NA NA
#> 6 0.20 0.2580645 0.2432432 0.1296296 NA NA NA
#> 7 0.22 0.1290323 0.2162162 NA NA NA NA
#> 8 0.14 0.1290323 NA NA NA NA NA
#> 9 0.14 NA NA NA NA NA NA
#> 10 NA NA NA NA NA NA NA
#> 11 NA NA NA NA NA NA NA
#> 12 NA NA NA NA NA NA NA
#> 13 NA NA NA NA NA NA NA
#> 14 NA NA NA NA NA NA NA
#> 15 NA NA NA NA NA NA NA
#> 2010-02 2010-03
#> 1 1.00 1
#> 2 0.19 NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
#> 6 NA NA
#> 7 NA NA
#> 8 NA NA
#> 9 NA NA
#> 10 NA NA
#> 11 NA NA
#> 12 NA NA
#> 13 NA NA
#> 14 NA NA
#> 15 NA NA
”的做事方式。更好的方法是使数据采用整齐的格式(每个变量一行)。因此,您的R
会有列:cohort_table
,CohortPeriod
,CohortGroup
。然后,您可以根据value
合并cohort_table
和cohort_group
数据框并执行除法。
CohortGroup