Python 根据列为某些行指定权重
这是我的数据帧:Python 根据列为某些行指定权重,python,pandas,select,dataframe,rows,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
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
有任何方法可以做到这一点与重量一起使用。语法:
#vec = <vector of rows weights>
df.sample(weights = vec)
#vec=
df.样本(权重=向量)
与配重一起使用。语法:
#vec = <vector of rows weights>
df.sample(weights = vec)
#vec=
df.样本(权重=向量)
您可以使用dict
进行重复次数和听写理解:
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)
另一种解决方案,如果需要,使用以下方法重复所有行5次:
您可以使用
dict
进行重复次数和听写理解:
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)
另一种解决方案,如果需要,使用以下方法重复所有行5次:
谢谢你,但是我想保留上面数据框的相同部分(关于这个问题)@jezreal你认为排序吗?我认为你需要添加
df=df.reset_index(drop=True)
和df=df.reindex_axis(df.groupby(['id','Month']).cumcount.sort_values().index,axis=0.reset_index(drop=True)
如果需要与示例中相同的顺序。无排序,但复制所有数据框无逐行复制,则我不明白-您是否需要按列逐月复制所有行?或者需要pd.DataFrame({col:np.repeat(df[col],5)用于df.columns}中的col,columns=df.columns)
?如果要将所有行复制5次?谢谢,但我想保留上面数据框的相同部分(关于这个问题)@jezreal你认为排序吗?我认为你需要添加df=df.reset\u index(drop=True)
和df=df.reindex\u axis(df.groupby(['id','Month']).cumcount().sort\u values().index,axis=0)。reset\u index(drop=True)
如果需要与示例中相同的顺序。无排序,但复制所有数据框无逐行复制,则我不明白-您是否需要按列逐月复制所有行?或者需要pd.DataFrame({col:np.repeat(df[col],5)用于df.columns}中的col,columns=df.columns)
?是否将所有行复制5次?
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