Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转置/堆栈/取消堆栈数据帧,同时将字段名与现有列连接_Python_Pandas_Stack_Transpose - Fatal编程技术网

Python 转置/堆栈/取消堆栈数据帧,同时将字段名与现有列连接

Python 转置/堆栈/取消堆栈数据帧,同时将字段名与现有列连接,python,pandas,stack,transpose,Python,Pandas,Stack,Transpose,我有一个数据框,看起来像: Component Date MTD YTD QTD FC ABC Jan 2017 56 nan nan nan DEF Jan 2017 453 nan nan nan XYZ Jan 2017 657 PQR Jan 2017 123 ABC Feb 2017 56

我有一个数据框,看起来像:

Component   Date         MTD     YTD    QTD   FC
ABC         Jan 2017     56      nan    nan   nan
DEF         Jan 2017     453     nan    nan   nan
XYZ         Jan 2017     657
PQR         Jan 2017     123
ABC         Feb 2017     56     nan    nan   nan
DEF         Feb 2017     456    nan    nan   nan
XYZ         Feb 2017     6234   57
PQR         Feb 2017     123    346
ABC         Dec 2017     56     nan    nan   nan
DEF         Dec 2017     nan    nan    345   324
XYZ         Dec 2017     6234   57
PQR         Dec 2017     nan    346    54654   546
我希望以这样的方式转置这个数据帧,使组件成为现有MTD、QTD等列的前缀

因此,预期的产出将是:

Date         ABC_MTD   DEF_MTD   XYZ_MTD   PQR_MTD  ABC_YTD   DEF_YTD   XYZ_YTD    PQR_YTD   etcetc

Jan 2017     56         453        657       123     nan       nan        nan       nan    
Feb 2017     56         456        6234      123     nan       nan        57        346    
Dec 2017     56         nan        6234       nan                         57        346    
我不确定枢轴或堆栈/取消堆栈在这里是否有效。 提前感谢。

您可以尝试以下方法:

newdf=df.pivot(values=df.columns[2:], index='Date', columns='Component' )
newdf.columns = ['%s%s' % (b, '_%s' % a if b else '') for a, b in newdf.columns]   #join the multiindex columns names
print(newdf)
输出:

df
   Component       Date     MTD  YTD    QTD   FC
0        ABC 2017-01-01    56.0  NaN    NaN  NaN
1        DEF 2017-01-01   453.0  NaN    NaN  NaN
2        XYZ 2017-01-01   657.0
3        PQR 2017-01-01   123.0
4        ABC 2017-02-01    56.0  NaN    NaN  NaN
5        DEF 2017-02-01   456.0  NaN    NaN  NaN
6        XYZ 2017-02-01  6234.0   57
7        PQR 2017-02-01   123.0  346
8        ABC 2017-12-01    56.0  NaN    NaN  NaN
9        DEF 2017-12-01     NaN  NaN    345  324
10       XYZ 2017-12-01  6234.0   57
11       PQR 2017-12-01     NaN  346  54654  546



newdf
           ABC_MTD DEF_MTD PQR_MTD XYZ_MTD ABC_YTD DEF_YTD PQR_YTD XYZ_YTD ABC_QTD DEF_QTD PQR_QTD XYZ_QTD ABC_FC DEF_FC PQR_FC XYZ_FC
Date
2017-01-01      56     453     123     657     NaN     NaN                     NaN     NaN                    NaN    NaN
2017-02-01      56     456     123    6234     NaN     NaN     346      57     NaN     NaN                    NaN    NaN
2017-12-01      56     NaN     NaN    6234     NaN     NaN     346      57     NaN     345   54654            NaN    324    546

第一个数据帧中的空白也是空的,或者只是空字符串?这是pivot和flattecolumns@sammywemmy这些空空格也是空的…@YOBEN_S:你能帮助我们如何执行吗?给@YOBEN_的建议一个gothanks..刚刚交换了a和b newdf.columns=['%S%S'(b','u%S'%a如果b else')对于a,b在newdf.columns}中刚刚更改了列名!很高兴这对您有帮助!您能接受吗?:)我将不胜感激。