首页 > 解决方案 > 重塑、合并、连接 pandas 数据框

问题描述

我有一个如下的df:

df = pd.DataFrame({"location":["north", "south","north"], "store": ["a","b","c"], "date" : ["02112018","02152018","02182018"], "barcode1":["ok", "low","ok"], "barcode2": ["low","zero","zero"], "barcode3": ["ok","zero","low"]})

df

我想要的如下:

df_desired

我所做的是使用以下代码重复每一行,条形码次数:

df_1 = pd.DataFrame(np.repeat(df.iloc[:,:3].values,len(df.iloc[0,:3:]),axis=0))
df_1.columns = df.columns[:3]

并具有以下输出:

df_1

但是我不知道如何到达 df_desired。抱歉,我找不到合适的标题。任何帮助,将不胜感激。

标签: pandas

解决方案


您可以使用pd.meltunpivot 数据框,.sort_values通过store为您提供所需的行顺序。

pd.melt(
    df, 
    id_vars=['location', 'store', 'date'], 
    var_name='barcode', 
    value_name='control').sort_values(by=['store'])

  location store      date   barcode control
0    north     a  02112018  barcode1      ok
3    north     a  02112018  barcode2     low
6    north     a  02112018  barcode3      ok
1    south     b  02152018  barcode1     low
4    south     b  02152018  barcode2    zero
7    south     b  02152018  barcode3    zero
2    north     c  02182018  barcode1      ok
5    north     c  02182018  barcode2    zero
8    north     c  02182018  barcode3     low

推荐阅读