我有一個有多個列的熊貓數據框,我想將它「扁平化」爲兩列 - 一列爲列名,另一列爲值。例如。熊貓 - 多列到「列名 - 值」列
df1 = pd.DataFrame({'A':[1,2],'B':[2,3], 'C':[3,4]})
我怎樣才能將其轉換看起來像:
df2 = pd.DataFrame({'column name': ['A','A','B','B','C','C'], 'value': [1,2,2,3,3,4]})
我有一個有多個列的熊貓數據框,我想將它「扁平化」爲兩列 - 一列爲列名,另一列爲值。例如。熊貓 - 多列到「列名 - 值」列
df1 = pd.DataFrame({'A':[1,2],'B':[2,3], 'C':[3,4]})
我怎樣才能將其轉換看起來像:
df2 = pd.DataFrame({'column name': ['A','A','B','B','C','C'], 'value': [1,2,2,3,3,4]})
可以stack
堆疊的所有列值到一個單一的,列,然後刪除第一級索引調用reset_index
,覆蓋與列名你想要的,然後最終使用sort_values
排序:
In [37]:
df2 = df1.stack().reset_index(level=0, drop=True).reset_index()
df2.columns = ['column name', 'value']
df2.sort_values(['column name', 'value'], inplace=True)
df2
Out[37]:
column name value
0 A 1
3 A 2
1 B 2
4 B 3
2 C 3
5 C 4
您可以通過stack
重塑到MultiIndex
Series
然後reset_index
與sort_values
:
df2 = df1.stack().reset_index(level=0, drop=True).reset_index().sort_values('index')
df2.columns = ['column name','value']
print (df2)
column name value
0 A 1
3 A 2
1 B 2
4 B 3
2 C 3
5 C 4
一個與rename
列排液index
至column name
:
df2 = df1.stack()
.reset_index(level=0, drop=True)
.reset_index(name='value')
.sort_values(['index'])
.rename(columns={'index':'column name'})
print (df2)
column name value
0 A 1
3 A 2
1 B 2
4 B 3
2 C 3
5 C 4
如果兩列需要排序:
df2 = df1.stack().reset_index(level=0, drop=True).reset_index().sort_values(['index',0])
df2.columns = ['column name','value']
print (df2)
column name value
0 A 1
3 A 2
1 B 2
4 B 3
2 C 3
5 C 4
嗯,2分鐘的差異......你怎麼看? – jezrael
@jezrael你的第一個發佈的答案是不正確的和不完整的,因此,爲什麼我發佈我的,它在事情的大計劃中很少 – EdChum