在熊猫数据框中拆分行

时间:2019-10-23 12:52:38

标签: python pandas

我坚持如何按行划分熊猫数据框的问题,

我在列中有类似的数据框,其中值之间用\ r \ n分隔并且它们在一个单元格中,

credentials: 'include'

并且我需要将此单元格划分为几个具有与其他列相同值的单元格,例如此处

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

如何做得更好?

4 个答案:

答案 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")