我有一个与以下格式相似的数据框;
Sites Points Value
ABC,DEF 2 10
GHI, JKL,MNO 4 15
我想为每个点创建新行,我已经可以使用以下代码进行处理(免责声明:我找到了此代码,但找不到引用);
def duplicate_rows(df, countcol):
for _, row in df.iterrows():
for i in range(int(row[countcol])-1):
df = df.append(row)
df.sort_index(inplace=True)
return df
df_dup = duplicate_rows(base_df,'Points')
输出为
Sites Points Values
ABC, DEF 2 10
ABC, DEF 2 10
GHI, JKL, MNO 4 15
GHI, JKL, MNO 4 15
GHI, JKL, MNO 4 15
GHI, JKL, MNO 4 15
我想要实现的是;
Sites Points Values
ABC 2 10
DEF 2 10
GHI 4 15
JKL 4 15
MNO 4 15
MNO 4 15
关于如何实现这一目标的任何想法?
答案 0 :(得分:2)
IIUC,如果您使用的是0.25+熊猫:
(df.assign(Sites=df.Sites.str.split(',\s*'))
.explode('Sites')
)
输出:
Sites Points Value
0 ABC 2 10
0 DEF 2 10
1 GHI 4 15
1 JKL 4 15
1 MNO 4 15
答案 1 :(得分:1)
您可以使用DataFrame.explode
,
df['Sites'] = df['Sites'].str.split(',')
df.explode('Sites').reset_index(drop = True)
Sites Points Value
0 ABC 2 10
1 DEF 2 10
2 GHI 4 15
3 JKL 4 15
4 MNO 4 15