我有一个包含一些数据的数据框,我想要转换它,以便一列的值定义新列。
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
到目前为止我想出的并没有完全发挥作用:
First()
除了这不正确之外,我想无论如何可能还有一种更有效的方法。我真的很难理解如何处理大熊猫的事情。
答案 0 :(得分:4)
你几乎就在那里,但你需要.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
答案 1 :(得分:1)
使用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
答案 2 :(得分:1)
使用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