【发布时间】:2021-06-30 11:01:12
【问题描述】:
我有以下数据框(df1):
Value col1 col2 col3
0 a aa ab ac
1 b ba bb bc
2 c ca cb cc
3 d da db dc
4 e ea eb ec
我需要从df1 派生数据框(df2),这样d2 的第 1 列将具有列名从第 1 列到第 3 列的值列的连接原始值。@987654326 的第 2 列@ 将具有与每个连接列名称对应的原始值,下面是需要生成的示例。 :
Value Col 1
0 a_Col 1 aa
1 a_Col 2 ab
2 a_Col 3 ac
3 b_Col 1 ba
4 b_Col 2 bb
5 b_Col 3 bc
6 c_Col 1 ca
7 c_Col 2 cb
8 c_Col 3 cc
9 d_Col 1 da
10 d_Col 2 db
11 d_Col 3 dc
12 e_Col 1 ea
13 e_Col 2 eb
14 e_Col 3 ec
我已按照以下步骤从 df1 导出 df2。但这个过程似乎有点长。有什么缩短流程的建议吗?
下面是我用过的代码
d = {'Value': ['a','b','c','d','e'],'col1': ['aa','ba','ca','da','ea'], 'col2' : ['ab','bb','cb','db','eb'],'col3': ['ac','bc','cc','dc','ec']}
df1 = pd.DataFrame(data = d)
# Repeat every value is Value column 3 times.
X = df1['Value'].repeat(4).reset_index(drop=True)
# Create separate series with Col 1, Col 2, Col 3 names.
Y = pd.Series(df1.columns[1:])
# Repeated series Y to the length of data df1
YY = pd.Series(np.tile(Y.values, len(df1)))
# Create the first column by concatenating X and YY
first_column_1 = X + "_" + YY
Z = df1.set_index('Value')
ZZ = np.ravel(Z.values)
#Create 2nd column from ZZ
second_column = pd.Series(ZZ)
#Create df2
df2 = pd.DataFrame([first_column, second_column]).T
【问题讨论】:
标签: python pandas dataframe numpy