pandas 分组或取消透视df不考虑空值

cnjp1d6j  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(193)

我有一个这样的df:
| 产品编号|杰拉尔基校长|第二代杰拉尔奎氏菌|COT公司|电子商务|达布拉目录|德克斯特电子商务|仓储电子商务|
| - -|- -|- -|- -|- -|- -|- -|- -|
| AD 802309微处理器|梅迪亚翁布雷|艾迪达斯|小行星950699|不含N|不含N|不含N|不含N|
| AD 481076型模数转换器|不含N|阿迪达斯|小行星950699|不含N|不含N|不含N|不含N|
| AD 481137微处理器|梅迪亚翁布雷|阿迪达斯|小行星950699|梅迪亚翁布雷|梅迪亚翁布雷|梅迪亚翁布雷|梅迪亚翁布雷|
我需要得到这个输出:
| 产品编号|产品类别名称|产品类别层次结构名称|
| - -|- -|- -|
| AD 802309微处理器|梅迪亚翁布雷|杰拉尔基校长|
| AD 802309微处理器|艾迪达斯|第二代杰拉尔奎氏菌|
| AD 802309微处理器|小行星950699| COT公司|
| AD 481076型模数转换器|阿迪达斯|第二代杰拉尔奎氏菌|
| AD 481076型模数转换器|小行星950699| COT公司|
| AD 481137微处理器|梅迪亚翁布雷|杰拉尔基校长|
| AD 481137微处理器|阿迪达斯|第二代杰拉尔奎氏菌|
| AD 481137微处理器|小行星950699| COT公司|
| AD 481137微处理器|梅迪亚翁布雷|电子商务|
| AD 481137微处理器|梅迪亚翁布雷|达布拉目录|
| AD 481137微处理器|梅迪亚翁布雷|德克斯特电子商务|
| AD 481137微处理器|梅迪亚翁布雷|仓储电子商务|
可能吗?“NaN”值不能转置

rmbxnbpk

rmbxnbpk1#

请尝试:

df = (
    df.set_index("PRODUCTNUMBER")
    .stack()
    .reset_index()
    .rename(
        columns={
            0: "PRODUCTCATEGORYNAME",
            "level_1": "PRODUCTCATEGORYHIERARCHYNAME",
        }
    )
)

df = df[["PRODUCTNUMBER", "PRODUCTCATEGORYNAME", "PRODUCTCATEGORYHIERARCHYNAME"]]
print(df)

印刷品:

PRODUCTNUMBER PRODUCTCATEGORYNAME PRODUCTCATEGORYHIERARCHYNAME
0       AD802309       Medias-Hombre          Jerarquía principal
1       AD802309              ADIDAS  Jerarquía secundaria marcas
2       AD802309              950699                          COT
3       AD481076              Adidas  Jerarquía secundaria marcas
4       AD481076              950699                          COT
5       AD481137       Medias-Hombre          Jerarquía principal
6       AD481137              Adidas  Jerarquía secundaria marcas
7       AD481137              950699                          COT
8       AD481137       Medias-Hombre                    Ecommerce
9       AD481137       Medias-Hombre                dabra-catalog
10      AD481137       Medias-Hombre             Dexter-ecommerce
11      AD481137       Medias-Hombre        Stockcenter-ecommerce
vi4fp9gy

vi4fp9gy2#

尝试使用melt

out = df.melt('PRODUCTNUMBER',
               value_name='PRODUCTCATEGORYHIERARCHYNAME',
               var_name='PRODUCTCATEGORYNAME').dropna()
Out[201]: 
   PRODUCTNUMBER          PRODUCTCATEGORYNAME PRODUCTCATEGORYHIERARCHYNAME
0       AD802309          Jerarquía principal                Medias-Hombre
2       AD481137          Jerarquía principal                Medias-Hombre
3       AD802309  Jerarquía secundaria marcas                       ADIDAS
4       AD481076  Jerarquía secundaria marcas                       Adidas
5       AD481137  Jerarquía secundaria marcas                       Adidas
6       AD802309                          COT                       950699
7       AD481076                          COT                       950699
8       AD481137                          COT                       950699
11      AD481137                    Ecommerce                Medias-Hombre
14      AD481137                dabra-catalog                Medias-Hombre
17      AD481137             Dexter-ecommerce                Medias-Hombre
20      AD481137        Stockcenter-ecommerce                Medias-Hombre
bvn4nwqk

bvn4nwqk3#

我需要一个简单的例子来回答

示例

data = {'A': {'a': 'val1', 'b': 'val3'},
        'B': {'a': None, 'b': 'val4'},
        'C': {'a': 'val2', 'b': None}}
df = pd.DataFrame(data)

输出(df):

A       B       C
a   val1    None    val2
b   val3    val4    None

代码

当按stack反透视时,我们可以自动删除null,

df.stack().reset_index().set_axis(['col1', 'col2', 'col3'], axis=1)

实验结果:

col1    col2    col3
0   a       A       val1
1   a       C       val2
2   b       A       val3
3   b       B       val4

相关问题