[英]reshape data frame in pandas with pivot table
我有一個看起來像這樣的數據框:
baz qux
one A
one B
two C
three A
one B
one C
我正在嘗試將其重塑為如下所示:
one two three
A C A
B
B
C
我對這是否可能以及如果如何做會很困惑。 我已經嘗試過將pivot_table
方法用作pd.pivot_table(cols='baz', rows='qux')
但這引發了TypeError。 我想我是個白痴,在這里錯過了一些非常基本的東西。 有任何想法嗎?
我不確定這是否是最理想的方法,但確實可以做到:
import io
import pandas as pd
data = u'baz,qux\none,A\none,B\ntwo,C\nthree,A\none,B\none,C'
df = pd.read_csv(io.StringIO(data))
new = pd.DataFrame()
for key, group in df.groupby('baz'):
new = pd.concat([new, pd.DataFrame(group.reset_index().qux, columns=[key])],
axis=1)
print new.replace(np.nan, '')
這回饋:
one two three
0 A C A
1 B
2 B
3 C
使用數據透視表,您可以獲得一個矩陣,該矩陣顯示哪個baz
對應哪個qux
:
>>> df['foo'] = 1 # Add aggregation column
>>> df.pivot_table('foo', cols='baz', rows=['qux'])
one three two
A 1 1 NaN
B 1 NaN NaN
C 1 NaN 1
這不是您所要求的,但是也許就足夠了:
import numpy as np
import pandas as pd
df = pd.DataFrame({'baz':'one one two three one one'.split(),
'qux': list('ABCABC')})
grouped = df.groupby(['baz', 'qux'])
df2 = grouped.apply(pd.DataFrame.reset_index, drop=True)['qux'].unstack(level=0)
df2.reset_index(drop=True, inplace=True)
df2 = df2.reindex(columns='one two three'.split())
df2 = df2.replace(np.nan, '')
print(df2)
產量
one two three
0 A A
1 B
2 B
3 C C
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.