2016-05-12 4 views
-1
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はパンダ0.16と0.17を使用していましたが、0.18では失敗しています。 aggfunc=lambda x: sum(x)は、すべてのデータが数値である場合に機能し、すべてのデータが非数値である場合にはaggfunc=lambda x: ' '.join(x)が機能します。しかし、数値と非数値の両方の場合、データセットに悩まされています。 aggfuncに条件を含める方法が不明です。すべてのエントリには一意の値があります。したがって、集約は実際には必要ありません。パンダ0.18データに数値データ型と非数値データ型の両方が含まれている場合のデータフレームのピボット方法

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

これは動作します:

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 

が、それはあなたが達成したい何をすべきか明確ではないのですが...

+0

ありがとうございました!これは機能します。私はピボットテーブルを使って特定の方法で情報を表示しようとしていました。すべてのエントリは一意であるとみなされ、集約は必要ありません。ありがとう!! – SHK

関連する問題