我希望根據 Python 中的特定列來分解我的資料集。
資料
id type date stat energy
aa ss Q1 2022 3 10
aa ss Q2 2022 2 10
bb uu Q1 2022 1 15
bb uu Q2 2022 3 15
cc ii Q1 2022 0 0
期望的
id type date stat energy
aa ss Q1 2022 3 10
aa ss Q1 2022 3 10
aa ss Q1 2022 3 10
aa ss Q2 2022 2 10
aa ss Q2 2022 2 10
bb uu Q1 2022 1 15
bb uu Q2 2022 3 15
bb uu Q2 2022 3 15
bb uu Q2 2022 3 15
cc ii Q1 2022 0 0
正在做
df.explode(list['stat'])
任何建議表示贊賞
uj5u.com熱心網友回復:
使用df.index.repeat:
repeats = np.where(df['stat'] == 0, 1, df['stat'])
# OR
repeats = df['stat'].clip(lower=1)
out = df.reindex(df.index.repeat(repeats)).reset_index(drop=True)
print(out)
# Output
id type date stat energy
0 aa ss Q1 2022 3 10
1 aa ss Q1 2022 3 10
2 aa ss Q1 2022 3 10
3 aa ss Q2 2022 2 10
4 aa ss Q2 2022 2 10
5 bb uu Q1 2022 1 15
6 bb uu Q2 2022 3 15
7 bb uu Q2 2022 3 15
8 bb uu Q2 2022 3 15
9 cc ii Q1 2022 0 0
uj5u.com熱心網友回復:
另一種解決方案可能是
df['stat'] = [[x]*x if x > 0 else [x] for x in df['stat']]
new = df.explode('stat')
uj5u.com熱心網友回復:
更快更整潔的方法是使用 np.repeat
m=df['stat'].ge(1)#Isolate rows to be duplicated
df1 = (pd.DataFrame(np.repeat(df[m].values,df.loc[m,'stat'], axis=0)#convert to numpy array and duplicate conditionally
, columns=df.columns)#Convert back to df
.append(df[~m])#Reappend rows that had had zero dup required
)
print(df1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420310.html
標籤:
