我有一个数据框:
In [1]: import pandas as pd
...:
...: df = pd.DataFrame([['dicts', 'oui_lookup', 'MergeTree', 'ipdr1']], colum
...: ns=['database', 'table', 'engine', 'server'])
...: df
Out[1]:
database table engine server
0 dicts oui_lookup MergeTree ipdr1
我想旋转数据框以更改其格式。
In [3]: df.pivot(index='table', columns='server', values='engine')
Out[3]:
server ipdr1
table
oui_lookup MergeTree
到目前为止,太好了。 现在我也想在索引数据库中使用,我尝试过:
In [4]: df.pivot(index=['database', 'table'], columns='server', values='engine')
...:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-c81911288ca4> in <module>
----> 1 df.pivot(index=['database', 'table'], columns='server', values='engine')
/usr/lib/python3.7/site-packages/pandas/core/frame.py in pivot(self, index, columns, values)
5635 def pivot(self, index=None, columns=None, values=None):
5636 from pandas.core.reshape.pivot import pivot
-> 5637 return pivot(self, index=index, columns=columns, values=values)
5638
5639 _shared_docs['pivot_table'] = """
/usr/lib/python3.7/site-packages/pandas/core/reshape/pivot.py in pivot(data, index, columns, values)
385 else:
386 indexed = data._constructor_sliced(data[values].values,
--> 387 index=index)
388 return indexed.unstack(columns)
389
/usr/lib/python3.7/site-packages/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath)
247 'Length of passed values is {val}, '
248 'index implies {ind}'
--> 249 .format(val=len(data), ind=len(index)))
250 except TypeError:
251 pass
ValueError: Length of passed values is 1, index implies 2
但是我得到了这个错误。 我需要的是这种形式的数据框:
Out[16]:
ipdr1
database table
dicts oui_lookup MergeTree
我做错了什么?
答案 0 :(得分:1)
将pivot
与DataFrame.set_index
和Series.unstack
结合使用:
df1 = df.set_index(['database', 'table','server'])['engine'].unstack()
print (df1)
server ipdr1
database table
dicts oui_lookup MergeTree