通过将某些列换行来重塑熊猫数据框

时间:2020-03-30 21:19:36

标签: python pandas dataframe

我有一个这样的熊猫数据框:

PrimitiveBatch

我要使它看起来像这样:

+-------+-----+-----------------+----------------+----------------+
| name  | age | favourite_color | favourite_food | favourite_city |
+-------+-----+-----------------+----------------+----------------+
| john  |  25 | yellow          | apple          | munich         |
| james |  24 | red             | onion          | melbourne      |
+-------+-----+-----------------+----------------+----------------+

我想采用3个“收藏夹事物”类别,并将其从3列细分为2列。一栏应该是 thing 的名称,另一栏应该是 thing 的值。

在此过程中,表中的行数应乘以favourite_something类别的数目(在本例中为3x),并且名称和年龄之类的常用值应重复。

总的来说,我的数据集每人每行包含3个观察值:喜欢的颜色,食物和城市。我想重塑数据框的形状,以便在任何给定的行中只有一个观察值。

请告诉我此操作在数据处理中叫什么,以及在python和pandas中执行此操作的最简单方法。

2 个答案:

答案 0 :(得分:1)

这本质上是一个重塑问题,您可以使用DataFrame.melt解决。您的数据框具有多个值变量,

new_df = df.melt(id_vars= ['name', 'age'], value_vars=['favourite_color', 'favourite_food', 'favourite_city'], \
        var_name='favourite category', value_name='value of favourite category')
new_df['favourite category'] = new_df['favourite category'].replace({'favourite_':''}, regex = True)

    name    age favourite category  value of favourite category
0   john    25  color               yellow
1   james   24  color               red
2   john    25  food                apple
3   james   24  food                onion
4   john    25  city                munich
5   james   24  city                melbourne

答案 1 :(得分:0)

由于您希望重塑(“收藏夹”)的列中有一些共性,因此可以在此处部署pandas的wide to long:只需声明各种参数,然后将其传递给函数:

  pd.wide_to_long(df,
                  stubnames ='favourite',
                  i=['name','age'],
                  j='favourite category',
                  suffix = r'(color|food|city)',
                  sep='_').rename(columns={'favourite':'value of favourite category'}).reset_index()



    name    age favourite category  value of favourite category
0   john    25       color                 yellow
1   john    25       food                  apple
2   john    25       city                  munich
3   james   24       color                 red
4   james   24       food                  onion
5   james   24       city                  melbourne
相关问题