我是一个数据框:
field,value
a,1
a,2
b,8
我想将其转换为此表格
a,b
1,8
2,8
答案 0 :(得分:2)
你可以这样做:
# df = pd.read_clipboard(sep=',')
df.pivot(columns=field, values=value).bfill().dropna()
答案 1 :(得分:2)
print (df)
0 1
0 a 1
1 a 2
2 b 8
通过GroupBy.cumcount
创建新索引组的解决方案,然后pivot
并填写缺失值:
g = df.groupby(0).cumcount()
df1 = pd.pivot(index=g, columns=df[0], values=df[1]).ffill().astype(int)
.rename_axis(None, axis=1)
print (df1)
a b
0 1 8
1 2 8
另一种解决方案会创建apply
的群组,并按unstack
重新整形:
print (df.groupby(0).apply(lambda x: pd.Series(x[1].values)).unstack(0).ffill().astype(int)
.rename_axis(None, axis=1))
a b
0 1 8
1 2 8
答案 2 :(得分:2)
set_index
,每个cumcount
群组field
+ field
unstack
+ ffill
df.set_index(
[df.groupby('field').cumcount(), 'field']
).value.unstack().ffill().astype(df.value.dtype)
field a b
0 1 8
1 2 8
答案 3 :(得分:0)
更简单的解决方案就是DataFrame.T
(转置)
df_new = df.T