当使用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/