现在,我有一个数据框df
:
>>> df = pd.DataFrame({'name':['a','a','b'], 'value1':[100,200,300], 'value2':[1,2,3]})
>>> df
name value1 value2
0 a 100 1
1 a 200 2
2 b 300 3
现在,我想将
df
更改为以下形式: name value1 value2 name value1 value2
a 100 1 a 200 2
b 300 3
那么,如何有效地转换
df
? 最佳答案
g = df.groupby('name').cumcount().astype(str)
df1 = (df.set_index([df['name'],g])
.unstack()
.sort_index(axis=1, level=1)
.reset_index(drop=True))
对于唯一的列名称,请使用
join
:df1.columns = df1.columns.map('_'.join)
print (df1)
name_0 value1_0 value2_0 name_1 value1_1 value2_1
0 a 100.0 1.0 a 200.0 2.0
1 b 300.0 3.0 None NaN NaN
如果要使用重复的列名,请使用
droplevel
:df1.columns = df1.columns.droplevel(1)
print (df1)
name value1 value2 name value1 value2
0 a 100.0 1.0 a 200.0 2.0
1 b 300.0 3.0 None NaN NaN
编辑:
用
apply
替代存在问题,因为所有dtypes
都更改为object
。关于python - 如何将DataFrame的行更改为 Pandas 中的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46986846/