Python 迭代从列和数据帧到列表转换(pandas)的条件

Python 迭代从列和数据帧到列表转换(pandas)的条件,python,python-3.x,pandas,dataframe,numpy,Python,Python 3.x,Pandas,Dataframe,Numpy,我有这样一个数据帧: Item Quantity Price Photo1 Photo2 Photo3 Photo4 A 2 30 A1.jpg A2.jpg B 4 10 B1.jpg B2.jpg B3.jpg B4.jpg C 5 15 C1.jpg photo_df = df1.filter(lik

我有这样一个数据帧:

Item   Quantity  Price     Photo1     Photo2    Photo3    Photo4

A        2         30      A1.jpg      A2.jpg 
B        4         10      B1.jpg      B2.jpg    B3.jpg    B4.jpg
C        5         15      C1.jpg
photo_df = df1.filter(like='Photo')
photo_df = photo_df.transform(lambda x: np.where(x.isnull(), x, x.name)) 
photo_df = photo_df.fillna('')
这些是我之前提出的关于将数据帧转换成这种格式的问题

我首先创建了一个列表:

df1 = df.reindex(['Item','Quantity','Price','Photo1','Photo2','Photo3','Photo4','I','Q','P','PH',] axis=1)
df1['I'] = df1['I'].fillna['I']
df1['Q'] = df1['Q'].fillna['Q']
df1['P'] = df1['P'].fillna['P']
df1['PH'] = df1['PH'].fillna['PH']
vals = [['I','Item'],['Q','Quantity'],['P','Price']]
我试着从第一个问题开始:

photo_df = df1.fillna('').filter(like='Photo')


vals = [y for x in photo_df.to_numpy() 
         for y in vals[:3] + [['PH',z] for z in x[x!='']] ]
列表返回

vals = [['I','Item'],['Q','Quantity'],['P','Price'],['PH','A1.jpg'],['PH','A2.jpg'],
        ['I','Item'],['Q','Quantity'],['P','Price'],['PH','B1.jpg'],['PH','B2.jpg'],['PH','B3.jpg'],['PH','B4.jpg'],
        ['I','Item'],['Q','Quantity'],['P','Price'],['PH','C1.jpg']]
我希望列表如下:

vals = [['I','Item'],['Q','Quantity'],['P','Price'],['PH','Photo1'],['PH','Photo2'],
        ['I','Item'],['Q','Quantity'],['P','Price'],['PH','Photo1'],['PH','Photo2'],['PH','Photo3'],['PH','Photo4'],
        ['I','Item'],['Q','Quantity'],['P','Price'],['PH','Photo1']]
   
我希望在列表中保留标题名称,而不是数据,但应以问题中的格式迭代数据:
想法是在列表理解中过滤列名称而不是值-将
x[x!=''']
更改为
photo\u df.columns[x!=']


想法是在列表理解中过滤列名称,而不是值-将
x[x!=''']
更改为
photo\u df.列[x!=']


您只需在创建
photo_df
的地方做一个小改动,如下所示:

Item   Quantity  Price     Photo1     Photo2    Photo3    Photo4

A        2         30      A1.jpg      A2.jpg 
B        4         10      B1.jpg      B2.jpg    B3.jpg    B4.jpg
C        5         15      C1.jpg
photo_df = df1.filter(like='Photo')
photo_df = photo_df.transform(lambda x: np.where(x.isnull(), x, x.name)) 
photo_df = photo_df.fillna('')
第二行只是将非null值替换为其列名

输出:

[['I', 'Item'], ['Q', 'Quantity'], ['P', 'Price'], ['PH', 'Photo1'], ['PH', 'Photo2'], 
['I', 'Item'], ['Q', 'Quantity'], ['P', 'Price'], ['PH', 'Photo1'], ['PH', 'Photo2'], 
['PH', 'Photo3'], ['PH', 'Photo4'], ['I', 'Item'], ['Q', 'Quantity'], ['P', 'Price'], ['PH', 'Photo1']]

您只需在创建
photo_df
的地方做一个小改动,如下所示:

Item   Quantity  Price     Photo1     Photo2    Photo3    Photo4

A        2         30      A1.jpg      A2.jpg 
B        4         10      B1.jpg      B2.jpg    B3.jpg    B4.jpg
C        5         15      C1.jpg
photo_df = df1.filter(like='Photo')
photo_df = photo_df.transform(lambda x: np.where(x.isnull(), x, x.name)) 
photo_df = photo_df.fillna('')
第二行只是将非null值替换为其列名

输出:

[['I', 'Item'], ['Q', 'Quantity'], ['P', 'Price'], ['PH', 'Photo1'], ['PH', 'Photo2'], 
['I', 'Item'], ['Q', 'Quantity'], ['P', 'Price'], ['PH', 'Photo1'], ['PH', 'Photo2'], 
['PH', 'Photo3'], ['PH', 'Photo4'], ['I', 'Item'], ['Q', 'Quantity'], ['P', 'Price'], ['PH', 'Photo1']]

请对此进行一些修改:请对此进行一些修改:请对此进行一些修改:请对此进行一些修改: