在pandas datafram中拆分行

2024-09-30 18:19:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是如何逐行划分pandas数据帧

我有类似的dataframe,列中的值用\r\n分隔,它们在一个单元格中

    Color                              Shape  Price
0  Green  Rectangle\r\nTriangle\r\nOctangle     10
1   Blue              Rectangle\r\nTriangle     15 

我需要将这个单元格分成几个单元格,这些单元格的值与其他列的值相同,比如这里

^{pr2}$

如何做得更好?在


Tags: 数据dataframepandasgreenbluepricecolorshape
3条回答

如前所述,str.split()后跟explode很有帮助。如果您没有使用Pandas 0.25,那么可以在之后使用melt

(pd.concat( (df.Shape.str.split('\r\n', expand=True), 
            df[['Color','Price']]),
          axis=1)
   .melt(id_vars=['Color', 'Price'], value_name='Shape')
   .dropna()
)

输出:

^{pr2}$

这可能不是最有效的方法,但我可以确认它与示例df一起工作:

data = [['Green', 'Rectangle\r\nTriangle\r\nOctangle', 10], ['Blue', 'Rectangle\r\nTriangle', 15]]   
df = pd.DataFrame(data, columns = ['Color', 'Shape', 'Price'])
new_df = pd.DataFrame(columns = ['Color', 'Shape', 'Price'])

for index, row in df.iterrows():
    split = row['Shape'].split('\r\n')
    for shape in split:
        new_df = new_df.append(pd.DataFrame({'Color':[row['Color']], 'Shape':[shape], 'Price':[row['Price']]}))

new_df = new_df.reset_index(drop=True)
print(new_df)

输出:

^{pr2}$

您可以:

df["Shape"]=df["Shape"].str.split("\r\n")
print(df.explode("Shape").reset_index(drop=True))

输出:

^{pr2}$

相关问题 更多 >