2024-09-30 18:19:37 发布
网友
我的问题是如何逐行划分pandas数据帧
我有类似的dataframe,列中的值用\r\n分隔,它们在一个单元格中
Color Shape Price 0 Green Rectangle\r\nTriangle\r\nOctangle 10 1 Blue Rectangle\r\nTriangle 15
我需要将这个单元格分成几个单元格,这些单元格的值与其他列的值相同,比如这里
如何做得更好?在
如前所述,str.split()后跟explode很有帮助。如果您没有使用Pandas 0.25,那么可以在之后使用melt:
str.split()
explode
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() )
输出:
这可能不是最有效的方法,但我可以确认它与示例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)
您可以:
df["Shape"]=df["Shape"].str.split("\r\n") print(df.explode("Shape").reset_index(drop=True))
如前所述,
str.split()
后跟explode
很有帮助。如果您没有使用Pandas 0.25,那么可以在之后使用melt
:输出:
^{pr2}$这可能不是最有效的方法,但我可以确认它与示例df一起工作:
输出:
^{pr2}$您可以:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐