python - 根据列对某些行赋予权重

标签 python pandas select dataframe rows

这是我的数据框:

id   Year   Month   Day     Instant     Temperature     DayType     DayValidity     LoadNette   
192     2008    1   5   0   8.03    6   1   53039.77133     
193     2008    2   5   1   8.07    6   1   52200.71569     
194     2008    3   5   2   8.10    6   1   51681.17260     
195     2008    4   5   3   8.07    6   1   51907.94746     
196     2008    5   5   4   8.03    6   1   50848.16566     

我想将我的数据框复制 5 次,但是通过像这样基于月份为某些行提供 wieghts,例如月份为 4 的行,它将仅复制 3 次,而月份 4 仅复制 2 次,就像这样使用 python:

id   Year   Month   Day     Instant     Temperature     DayType     DayValidity     LoadNette   
192     2008    1   5   0   8.03    6   1   53039.77133     
193     2008    2   5   1   8.07    6   1   52200.71569     
194     2008    3   5   2   8.10    6   1   51681.17260     
195     2008    4   5   3   8.07    6   1   51907.94746     
196     2008    5   5   4   8.03    6   1   50848.16566
192     2008    1   5   0   8.03    6   1   53039.77133     
193     2008    2   5   1   8.07    6   1   52200.71569     
194     2008    3   5   2   8.10    6   1   51681.17260     
195     2008    4   5   3   8.07    6   1   51907.94746     
196     2008    5   5   4   8.03    6   1   50848.16566
192     2008    1   5   0   8.03    6   1   53039.77133     
193     2008    2   5   1   8.07    6   1   52200.71569     
194     2008    3   5   2   8.10    6   1   51681.17260     
195     2008    4   5   3   8.07    6   1   51907.94746     
196     2008    5   5   4   8.03    6   1   50848.16566
192     2008    1   5   0   8.03    6   1   53039.77133     
193     2008    2   5   1   8.07    6   1   52200.71569     
194     2008    3   5   2   8.10    6   1   51681.17260     
195     2008    4   5   3   8.07    6   1   51907.94746     
192     2008    1   5   0   8.03    6   1   53039.77133     
193     2008    2   5   1   8.07    6   1   52200.71569     
194     2008    3   5   2   8.10    6   1   51681.17260     

有什么办法可以做到这一点

最佳答案

您可以使用 dict 来获取 numpy.repeat 的重复次数和听写理解:

d = {1:5, 2:2, 3:1, 4:3, 5:3}
l = df['Month'].map(d)
df = pd.DataFrame({col: np.repeat(df[col], l) for col in df.columns}, columns=df.columns)

print (df)
    id  Year  Month  Day  Instant  Temperature  DayType  DayValidity  \
0  192  2008      1    5        0         8.03        6            1   
0  192  2008      1    5        0         8.03        6            1   
0  192  2008      1    5        0         8.03        6            1   
0  192  2008      1    5        0         8.03        6            1   
0  192  2008      1    5        0         8.03        6            1   
1  193  2008      2    5        1         8.07        6            1   
1  193  2008      2    5        1         8.07        6            1   
2  194  2008      3    5        2         8.10        6            1   
3  195  2008      4    5        3         8.07        6            1   
3  195  2008      4    5        3         8.07        6            1   
3  195  2008      4    5        3         8.07        6            1   
4  196  2008      5    5        4         8.03        6            1   
4  196  2008      5    5        4         8.03        6            1   
4  196  2008      5    5        4         8.03        6            1   

     LoadNette  
0  53039.77133  
0  53039.77133  
0  53039.77133  
0  53039.77133  
0  53039.77133  
1  52200.71569  
1  52200.71569  
2  51681.17260  
3  51907.94746  
3  51907.94746  
3  51907.94746  
4  50848.16566  
4  50848.16566  
4  50848.16566  

另一种解决方案,如果需要使用 concat 将所有行重复 5 次 | :

df = pd.concat([df] * 5, ignore_index=True)

print (df)
     id  Year  Month  Day  Instant  Temperature  DayType  DayValidity  \
0   192  2008      1    5        0         8.03        6            1   
1   193  2008      2    5        1         8.07        6            1   
2   194  2008      3    5        2         8.10        6            1   
3   195  2008      4    5        3         8.07        6            1   
4   196  2008      5    5        4         8.03        6            1   
5   192  2008      1    5        0         8.03        6            1   
6   193  2008      2    5        1         8.07        6            1   
7   194  2008      3    5        2         8.10        6            1   
8   195  2008      4    5        3         8.07        6            1   
9   196  2008      5    5        4         8.03        6            1   
10  192  2008      1    5        0         8.03        6            1   
11  193  2008      2    5        1         8.07        6            1   
12  194  2008      3    5        2         8.10        6            1   
13  195  2008      4    5        3         8.07        6            1   
14  196  2008      5    5        4         8.03        6            1   
15  192  2008      1    5        0         8.03        6            1   
16  193  2008      2    5        1         8.07        6            1   
17  194  2008      3    5        2         8.10        6            1   
18  195  2008      4    5        3         8.07        6            1   
19  196  2008      5    5        4         8.03        6            1   
20  192  2008      1    5        0         8.03        6            1   
21  193  2008      2    5        1         8.07        6            1   
22  194  2008      3    5        2         8.10        6            1   
23  195  2008      4    5        3         8.07        6            1   
24  196  2008      5    5        4         8.03        6            1   

      LoadNette  
0   53039.77133  
1   52200.71569  
2   51681.17260  
3   51907.94746  
4   50848.16566  
5   53039.77133  
6   52200.71569  
7   51681.17260  
8   51907.94746  
9   50848.16566  
10  53039.77133  
11  52200.71569  
12  51681.17260  
13  51907.94746  
14  50848.16566  
15  53039.77133  
16  52200.71569  
17  51681.17260  
18  51907.94746  
19  50848.16566  
20  53039.77133  
21  52200.71569  
22  51681.17260  
23  51907.94746  
24  50848.16566  

关于python - 根据列对某些行赋予权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670180/

相关文章:

python - Docker 撰写缺少的 python 包

python - 如何将 Dask Dataframe 转换为 Dask Array?

python - 使用 date_range 时如何使 x 轴更详细

mysql select count 多个条件

jQuery <选择> : how to get $(this. ID) :first?

python - 如何删除 JSON 对象的属性

Python- Selenium : Chrome headless setting does not work with "WebDriverWait"

MySQL Select 列搞砸了

python - 检查 NumPy 数组是否在 Python 列表中

python - 如何用 pandas 替换一定时间范围内的值及其平均值?