我使用以下代码设置数据框:
df = pd.DataFrame({'A':['a','a','b','c'],'B':[123,456,555,888]})
然后我执行以下代码:
pd.pivot(df.A, df.index, df.B)
数据框更改为:
现在我想知道如何将非NAN值移动到前面的列,如下所示:
答案 0 :(得分:1)
而不是can't be blank (value: undefined).
(然后修复结果),您可以使用pivot
:
groupby
或者,或者,使用In [321]: df = pd.DataFrame({'A':['a','a','b','c'],'B':[123,456,555,888]})
In [322]: df.groupby('A')['B'].apply(lambda x: pd.Series(x.values)).unstack()
Out[322]:
0 1
A
a 123.0 456.0
b 555.0 NaN
c 888.0 NaN
为每个组分配正确的列号,
然后groupby/cumcount
:
pivot
答案 1 :(得分:0)
git clone -b
答案 2 :(得分:0)
如果您希望使用NaNs
In [585]: dff = pd.pivot(df.A, df.index, df.B)
In [586]: (dff.apply(lambda x: pd.Series(x.dropna().values), axis=1)
.reindex_axis(dff.columns, 1))
Out[586]:
0 1 2 3
A
a 123.0 456.0 NaN NaN
b 555.0 NaN NaN NaN
c 888.0 NaN NaN NaN
如果您不需要
In [587]: dff.apply(lambda x: pd.Series(x.dropna().values), axis=1)
Out[587]:
0 1
A
a 123.0 456.0
b 555.0 NaN
c 888.0 NaN