我有一個Pandas包含幾列和幾行的資料框。
ColXYZ. Interval. Temperature. Pressure. ColCDE.
A. 121 0 25 60 0.195
B. 246 4 40 50 0.350
C. 241 0 40 50 0.133
....
我想在Interval值為 0時為每一行創建重復值,并為資料集中的所有Temperature和Pressure條件創建此值- 例如,創建 A 行的副本,除了溫度和壓力更改外,所有值都相同,為 C 行創建副本除了溫度和壓力發生變化外,所有值都相同。這是為了反映在時間間隔為 0 時,無論溫度和壓力如何,資料集行中的所有其他條目都保持不變。所需的輸出將是: -
ColXYZ. Interval. Temperature. Pressure. ColCDE.
121 0 25 60 0.195 #A
121 0 40 50 0.195 #Modified A copy
246 4 40 50 0.350 #B
241 0 40 50 0.133 #C
241 0 25 60 0.133 #Modified C copy
在這方面的任何幫助和建議將不勝感激。
uj5u.com熱心網友回復:
最理想的出路是交叉表,見下面的代碼
m=df['Interval.']==0
new=(
df[['Temperature.','Pressure.']]#Subset all temps
.merge# cross merge to subset of dfs with interval=0
(df[m].reset_index(),how='cross',suffixes = ('','_y')).drop_duplicates().drop(columns=['Temperature._y','Pressure._y'])# append back to subset of original df whose Interval was not 0
.append(df[~m].reset_index())# sort values by index
.sort_values(by=['index'])
)
結果
Temperature. Pressure. index ColXYZ. Interval. ColCDE.
0 25.0 60.0 A. 121.0 0.0 0.195
2 40.0 50.0 A. 121.0 0.0 0.195
0 40.0 50.0 B. 246.0 4.0 0.350
1 25.0 60.0 C. 241.0 0.0 0.133
3 40.0 50.0 C. 241.0 0.0 0.133
另一種方法是創建重復行并插入如下詳述原始df
ColXYZ Interval Temperature Pressure ColCDE
A. 121 0 25 60 0.195
B. 246 4 40 50 0.350
C. 241 0 40 50 0.133
#生成溫度和壓力串列
df=df.reset_index()#to preserve index
m=df['Interval']==0#selection of soert criteria
s=df['Temperature'].agg(list)
s1=df['Pressure'].agg(list)
#df中的重復行
df1 = pd.DataFrame(np.repeat(df[m].values, len(df), axis=0), columns=df.columns)
#distribute 溫度和壓力值以確保原始 df 中的每個唯一值都表示在每個唯一的 ColXYZ 中
df1['Temperature']= np.tile(s, int(len(df1)/(len(s))))
df1['Pressure']= np.tile(s1, int(len(df1)/(len(s1))))
#洗掉重復項
df1= df[~m].append(df1.assign(Temperature=np.tile(s, int(len(df1)/(len(s)))),Pressure= np.tile(s1, int(len(df1)/(len(s1))))).drop_duplicates()).sort_values(by=['index'])
結果
index ColXYZ Interval Temperature Pressure ColCDE
0 A. 121 0 25 60 0.195
1 A. 121 0 40 50 0.195
1 B. 246 4 40 50 0.35
3 C. 241 0 25 60 0.133
4 C. 241 0 40 50 0.133
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/405625.html
標籤:
