Python 如何更改数据帧';熊猫中的行到列?
现在,我有一个数据帧Python 如何更改数据帧';熊猫中的行到列?,python,pandas,Python,Pandas,现在,我有一个数据帧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
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
?使用+:
对于唯一的列名称,请使用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
如果需要重复的列名称,请使用:
编辑:
使用
apply
的替代方法是有问题的,因为所有dtype
都被更改为object
您请求的数据结构对于进一步处理(尤其是重复的标题)来说效率不高。你为什么要用那种格式?如果有几十个相同的名称,那么可能会有数百列。也许有更好的解决方案可以让你得到最终的结果。Thx,因为我正试图将数据处理成下游需要的形式,我也认为这种结构组织得不好,但我没有其他选择。
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
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