![](/img/trans.png)
[英]Pandas: Convert DataFrame Column Values Into New Dataframe Indices and Columns
[英]Convert dataframe column values to new columns
我有一個包含一些數據的數據框,我想要轉換,以便一列的值定義新列。
>>> import pandas as pd
>>> df = pd.DataFrame([['a','a','b','b'],[6,7,8,9]]).T
>>> df
A B
0 a 6
1 a 7
2 b 8
3 b 9
列A
的值應為新數據幀的列名。 轉換的結果應如下所示:
a b
0 6 8
1 7 9
到目前為止我想出的並沒有完全發揮作用:
>>> pd.DataFrame({ k : df.loc[df['A'] == k, 'B'] for k in df['A'].unique() })
a b
0 6 NaN
1 7 NaN
2 NaN 8
3 NaN 9
除了這是不正確的,我想無論如何可能還有更有效的方法。 我真的很難理解如何處理大熊貓的事情。
你幾乎就在那里,但你需要.values
作為數組列表,然后提供列名。
pd.DataFrame(pd.DataFrame({ k : df.loc[df['A'] == k, 'B'].values for k in df['A'].unique() }), columns=df['A'].unique())
輸出:
a b
0 6 8
1 7 9
使用set_index
, groupby
, cumcount
,並unstack
:
(df.set_index(['A', df.groupby('A').cumcount()])['B']
.unstack(0)
.rename_axis([None], axis=1))
輸出:
a b
0 6 8
1 7 9
使用groupby
的字典理解:
res = pd.DataFrame({col: vals.loc[:, 1].values for col, vals in df.groupby(0)})
print(res)
a b
0 6 8
1 7 9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.