这是我的数据框:
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/