我曾经在DAX中相当快地处理这类事情,但作为Pandas 的新手,我已经在这个问题上卡住了一段时间:

我试图输出一个数据透视表,显示每个月(列)和每个城市(行)的签证销售百分比.

下面是我正在寻找的输出:

              Jan        Feb                     
London  50.055991  56.435644
Paris   15.119760  67.170191

我try 过各种数据透视表和group—by函数,这让我如此接近,但离我需要的还很远.我只是习惯于在Excel中创建"度量",我可以像常规维度或事实一样添加到数据透视表中.

可复制输入:

data = {'Month': {0: 'Jan',
  1: 'Jan',
  2: 'Jan',
  3: 'Jan',
  4: 'Feb',
  5: 'Feb',
  6: 'Feb',
  7: 'Feb',
  8: 'Feb'},
 'City': {0: 'Paris',
  1: 'Paris',
  2: 'London',
  3: 'London',
  4: 'Paris',
  5: 'Paris',
  6: 'London',
  7: 'London',
  8: 'Paris'},
 'Card': {0: 'Visa',
  1: 'MasterCard',
  2: 'Visa',
  3: 'MasterCard',
  4: 'Visa',
  5: 'MasterCard',
  6: 'Visa',
  7: 'MasterCard',
  8: 'Visa'},
 ' Amount ': {0: ' $101 ',
  1: ' $567 ',
  2: ' $447 ',
  3: ' $446 ',
  4: ' $926 ',
  5: ' $652 ',
  6: ' $114 ',
  7: ' $88 ',
  8: ' $408 '}}

df = pd.DataFrame.from_dict(data)
df

推荐答案

你可以使用pd.crosstab来实现这个目标,链接df.stack将列级别的"City"移动到索引,链接df.loc将仅 Select "visa"(以及按所需顺序排列的列),链接df.mul将乘以pd.crosstab.

# first turn your `' Amount ' column into `integers`
df[' Amount '] = df[' Amount '].str.replace('$', '').astype(int)

out = (
    pd.crosstab(
        index=df['Card'], 
        columns=[df['City'], df['Month']], 
        values=df[' Amount '], 
        aggfunc='sum', 
        normalize='columns'
    )
    .stack(level='City', future_stack=True)
    .loc['Visa', ['Jan','Feb']]
    .mul(100)
)

Output

out

Month         Jan        Feb
City                        
London  50.055991  56.435644
Paris   15.119760  67.170191

Python相关问答推荐

比较两个二元组列表,NP.isin

如何使用symy打印方程?

连接两个具有不同标题的收件箱

在线条上绘制表面

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

使用groupby Pandas的一些操作

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

Pandas:将多级列名改为一级

在np数组上实现无重叠的二维滑动窗口

将输入聚合到统一词典中

Pandas—在数据透视表中占总数的百分比

如何在FastAPI中为我上传的json文件提供索引ID?

人口全部乱序 - Python—Matplotlib—映射

Gekko中基于时间的间隔约束

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

如何在PythonPandas 中对同一个浮动列进行逐行划分?

合并相似列表

我怎么才能用拉夫分拣呢?

有了Gekko,可以创建子模型或将模型合并在一起吗?

如何将一个文件的多列导入到Python中的同一数组中?