是否可以使用 apply 函式或任何其他函式撰寫下面的代碼,因為 iterrows 在這里似乎不可行。
用于創建資料框:
df = [[['55792', 'TRIM'], 'A', ['55792', 'TRIM']], [['ZQFC', 'DYWH'], 'A', ['MEIL', '1724']]]
df = pd.DataFrame(df, columns=['seg','cod','seg2'])
df
seg cod seg2
[55792, TRIM] A [55792, TRIM]
[ZQFC, DYWH] A [MEIL, 1724]
#output
seg cod seg2
[55792, TRIM] A [55792, TRIM]
[ZQFC, DYWH] A [MEIL, 1724]
[MEIL, 1724] A [MEIL, 1724]
因此,如果 seg 列和 seg2 列不匹配,我將擴展行。使用 apply 有更好的方法來做到這一點。
我用過的代碼:
df1 = pd.DataFrame(columns=df.columns)
for index, row in df.iterrows():
#if seg match seg 2
if(row['seg']==row['seg2'])==True:
#append same row
df1 = df1.append(row)
else:
#if not match, then we can create two seg, and append 2 row
#append same row first
df1 = df1.append(row)
#changing existing segment to new segment, and append
row['seg'] = row['seg2']
df1 = df1.append(row)
非常感謝。
uj5u.com熱心網友回復:
您不需要使用apply,只需將條件句用作布爾掩碼并以這種方式進行操作。
mask = df["seg"] == df["seg2"]
true_rows = df.loc[mask]
false_rows = df.loc[~mask]
changed_rows = false_rows.assign(seg=false_rows.seg2)
df1 = pd.concat([true_rows, false_rows, changed_rows], ignore_index=True)
print(df1)
seg cod seg2
0 [55792, TRIM] A [55792, TRIM]
1 [ZQFC, DYWH] A [MEIL, 1724]
2 [MEIL, 1724] A [MEIL, 1724]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405984.html
標籤:
