使用可变数据自动执行枢轴

时间:2019-02-08 17:06:12

标签: python-3.x pandas pivot

我正在尝试使用可容纳缺失列的熊猫自动化一个简单的数据透视表。源数据是.csv导出,包含相当统一的数据。但是,有时源数据中缺少一列或多列。因此,我试图创建一个程序来处理可变列标题并相应地旋转数据。

因此,如果源数据中存在所有列,则完整的透视图已完成(如下所示),程序将停止。

df = pd.read_csv(csv_file)


Overview = df[['Column1','Column2','Column3','Column4']]

Overview = Overview.pivot_table(index="Column1",
                                             values = ['Column2','Column3','Column4'],
                                             aggfunc = {'Column2':len,'Column3':np.sum, 'Column4':np.sum})

如果缺少一列,则完成一个有限的枢轴(如下)。该程序将在此处停止。

Overview = df[['Column1','Column2','Column3']]

Overview = Overview.pivot_table(index="Column1",
                                              values = ['Column2','Column3'],
                                              aggfunc = {'Column2':len,'Column3':np.sum})

如果缺少大多数列,则该最后的枢轴完成,程序结束。

Overview = df[['Column1','Column2']]

Overview = Overview.pivot_table(index="Column1",
                                              values = ['Column2'],
                                              aggfunc = {'Column2':len})

1 个答案:

答案 0 :(得分:0)

这是一个漫长的解决方案...

请注意,我假设.csv文件中始终存在“ Column1”。您的示例都表明“ Column1”将可用。

#Define which columns you want to check for (in this case, all of them)
list_of_columns = ['Column1','Column2','Column3','Column4']

lst = [] #Create dummy list
dels = [] #Create dummy list for deleting dictionary key/value pairs later

for l in list_of_columns:
    if l in df.columns.tolist():
        lst.append(l) 
    else:
        dels.append(l) 

#Define all functions possible for certain columns outside of index
d = {'Column2':len,'Column3':np.sum, 'Column4':np.sum}

#Remove key/value pairs from dictionary if a column is not present in .csv
for i in dels:
    del dels[i]

Overview = df[lst].pivot_table(index="Column1",
                   values = [lst[1:],
                   aggfunc = d)

希望这会有所帮助!也可以随意将代码定义为函数。