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)))
答案 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
但目前还不清楚你想要实现什么......