Pandas 0.18当数据包含数字和非数字类型时如何转动数据框

时间:2016-05-12 19:38:10

标签: python pandas pivot-table

import pandas as pd

df1 = pd.DataFrame({'index': range(6),
                    'Name': ["Swap1", "Swap2", "Swap3", "Swap1", "Swap2", "Swap3"],
                    'LegName': ["pay", "receive", "total", "pay", "receive", "total"],
                    'Metric': ["pv", "pv", "pv", "start", "start", "start"],
                    'result': [1, 2, 3, "1y", "1y", "1y"]})

print(df1)

结果列包含数字和非数字类型。 aggfunc=lambda x: x过去常常使用pandas 0.16和0.17,但失败的是0.18。当所有数据都是数字时,aggfunc=lambda x: sum(x)将起作用,而当所有数据都是非数字时,aggfunc=lambda x: ' '.join(x)将起作用。但是当它是数字和非数字时,我都被数据集所困。不确定如何使用aggfunc包含条件。所有条目都具有唯一值。因此实际上不需要聚合。

print(df1.pivot_table(values='result', index='index',
                      columns=['Name', 'LegName', 'Metric'],
                      aggfunc=lambda x:x))

print(df1.pivot_table(values='result', index='index',
                      columns=['Name', 'LegName', 'Metric'],
                      aggfunc=lambda x: sum(x)))

print(df1.pivot_table(values='result', index='index',
                      columns=['Name', 'LegName', 'Metric'],
                      aggfunc=lambda x: ' '.join(x)))

1 个答案:

答案 0 :(得分:0)

这将有效:

In [32]: df1.pivot_table(values='result', index='index',
   ....:                 columns=['Name', 'LegName', 'Metric'],
   ....:                 fill_value=0,
   ....:                 aggfunc='sum')
Out[32]:
Name    Swap1         Swap2       Swap3
LegName   pay       receive       total
Metric     pv start      pv start    pv start
index
0           1     0       0     0     0     0
1           0     0       2     0     0     0
2           0     0       0     0     3     0
3           0    1y       0     0     0     0
4           0     0       0    1y     0     0
5           0     0       0     0     0    1y

但目前还不清楚你想要实现什么......