将数据框列值转换为新列

时间:2018-06-12 16:58:53

标签: python pandas dataframe

我有一个包含一些数据的数据框,我想要转换它,以便一列的值定义新列。

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()

除了这不正确之外,我想无论如何可能还有一种更有效的方法。我真的很难理解如何处理大熊猫的事情。

3 个答案:

答案 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_indexgroupbycumcountunstack

(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