pandas.read_excel 如果列是主要的则列出

pandas.read_excel list if column is major

我正在使用 read_excel 读取一个文件,我需要列出每一行和每一列,其中列主要大于零。

excel内容类似这样:

fruit | america_inv | asia_inv | aurope_inv
apple | 0.0 | 2.0 | 0.0 
banana | 1.0 | 0.0 | 0.0
orange | 2.0 | 1.0 | 3.0

预期的输出是这样的:

apple, asia_inv
banana, america_inv
orange, america_inv
orange, asia_inv
orange, europe_inv

有什么想法吗?

我在第一步就被冻结了:

import pandas as pd

#Read excel file
df_excel_data = pd.read_excel('fruits.xlsm', sheet_name='all_fruits', usecols="C:BB", header=7)

#Normalize header
df_excel_data.columns = df_excel_data.columns.str.strip().str.lower().str.replace(' ', '_', regex=True).str.replace('(', '', regex=True).str.replace(')', '', regex=True).str.replace('\n', '_', regex=True)


df = pd.DataFrame(df_excel_data)

您可以使用 melt:

out = (df.melt('fruit', var_name='continent', ignore_index=False)
         .loc[lambda x: x.pop('value') > 0]
         .sort_index(ignore_index=True))
print(out)

# Output
    fruit    continent
0   apple     asia_inv
1  banana  america_inv
2  orange  america_inv
3  orange     asia_inv
4  orange   aurope_inv

或者(也许更容易理解):

out = (df.melt('fruit', var_name='continent', ignore_index=False)
         .query('value > 0')[['fruit', 'continent']]
         .sort_index(ignore_index=True))