python - 如何要求生成的数据透视表包含所有列组合的可能性?

标签 python dataframe pivot-table data-manipulation

当使用Python数据透视表时,我想包括所有列组合的可能性。例如:

import pandas as pd 
from pandas import DataFrame 

Result ={
 'SenderUserId': ['a', 'a', 'b', 'c', 'c'], 
 'Date': ['1', '2', '2', '3', '4'], 
 'RecipientUserId': ['m', 'm', 'n', 'n', 'z'],
 'nmail':[1, 2, 3, 3,7] 
}


result = DataFrame (Result, columns = ['SenderUserId', 'Date', 'RecipientUserId', 'nmail'])

result = result.pivot_table(index=['SenderUserId'], columns =['Date', 'RecipientUserId'], values = 'nmail').stack()

print (result.head ())

将产生以下结果:

Date                            1    2    3    4
SenderUserId RecipientUserId
a            m                1.0  2.0  NaN  NaN
b            n                NaN  3.0  NaN  NaN
c            n                NaN  NaN  3.0  NaN
             z                NaN  NaN  NaN  7.0

但是,我真正想要得到的是:

Date                            1    2    3    4
SenderUserId RecipientUserId
a            m                1.0  2.0  NaN  NaN
             n                NaN  NaN  NaN  NaN
             z                NaN  NaN  NaN  NaN
b            m                NaN  NaN  NaN  NaN
             n                NaN  3.0  NaN  NaN
             z                NaN  NaN  NaN  NaN
c            m                NaN  NaN  NaN  NaN
             n                NaN  NaN  3.0  NaN
             z                NaN  NaN  NaN  7.0

如您所见,我们只是在没有初始列匹配的地方添加几行并将它们分配为 NaN。没关系。只要能解决这个问题,我不一定需要使用pivot_table。任何帮助将不胜感激!

最佳答案

您要求的所有额外行必然都是 NaN,因此您可以将它们添加到末尾。完成枢轴后,您可以使用描述的技术 here将结果索引“扩展”到所有可能的组合。

pivot = result.pivot_table(index=['SenderUserId'], columns=['Date', 'RecipientUserId'], values='nmail').stack()
pivot.reindex(pd.MultiIndex.from_product(pivot.index.levels, names=pivot.index.names))

结果:

Date                            1    2    3    4
SenderUserId RecipientUserId                    
a            m                1.0  2.0  NaN  NaN
             n                NaN  NaN  NaN  NaN
             z                NaN  NaN  NaN  NaN
b            m                NaN  NaN  NaN  NaN
             n                NaN  3.0  NaN  NaN
             z                NaN  NaN  NaN  NaN
c            m                NaN  NaN  NaN  NaN
             n                NaN  NaN  3.0  NaN
             z                NaN  NaN  NaN  7.0

关于python - 如何要求生成的数据透视表包含所有列组合的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57583846/

相关文章:

python - 等待 Python 数据抓取结果加载

python - 在 Windows 上编译 python 脚本供 Linux 使用

python - 具有条件概率的随机选择

python - 求Python列表的平均值

r - 操作数据框列中的字符串

mysql - SQL 中没有聚合函数的行到列转换

python - 推送到开发时遇到 GAE 错误

使用 R 替换包含 NA 的数据框中多列的异常值

python - reshape 数据框并对每行应用计算

MYSQL SELECT 可重复字段到列中