我坚持如何按行划分熊猫数据框的问题,
我在列中有类似的数据框,其中值之间用\ r \ n分隔并且它们在一个单元格中,
credentials: 'include'
并且我需要将此单元格划分为几个具有与其他列相同值的单元格,例如此处
Color Shape Price
0 Green Rectangle\r\nTriangle\r\nOctangle 10
1 Blue Rectangle\r\nTriangle 15
如何做得更好?
答案 0 :(得分:2)
您可以这样做:
df["Shape"]=df["Shape"].str.split("\r\n")
print(df.explode("Shape").reset_index(drop=True))
输出:
Color Shape Price
0 Green Rectangle 10
1 Green Triangle 10
2 Green Octangle 10
3 Blue Rectangle 15
4 Blue Triangle 15
答案 1 :(得分:1)
如前所述,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()
)
输出:
Color Price variable Shape
0 Green 10 0 Rectangle
1 Blue 15 0 Rectangle
2 Green 10 1 Triangle
3 Blue 15 1 Triangle
4 Green 10 2 Octangle
答案 2 :(得分:1)
这可能不是最有效的方法,但我可以确认它可以与示例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)
输出:
Color Price Shape
0 Green 10 Rectangle
1 Green 10 Triangle
2 Green 10 Octangle
3 Blue 15 Rectangle
4 Blue 15 Triangle
答案 3 :(得分:0)
首先,您需要用空白将Shape分开,这将为您提供形状列表。然后,使用df.explode
解压缩列表并为每个列表创建新行
df["Shape"] = df.Shape.str.split()
df.explode("Shape")