簡體   English   中英

連接數據框中的值和列名以創建新的數據框

[英]Concatenate values and column names in a data frame to create a new data frame

我有以下數據框( 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

我需要導出的數據幀( df2從) df1 ,使得第1欄d2將具有與級聯西1的列名值列的原始值以山口3.柱2 d2將具有對應於每個級聯列中的原始值名稱,下面是需要生成的樣本。

      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

嘗試:

x = df.melt("Value", value_name="Col 1")
x.Value += "_" + x.variable
x = x.drop(columns="variable")
print(x)

印刷:

     Value Col 1
0   a_col1    aa
1   b_col1    ba
2   c_col1    ca
3   d_col1    da
4   e_col1    ea
5   a_col2    ab
6   b_col2    bb
7   c_col2    cb
8   d_col2    db
9   e_col2    eb
10  a_col3    ac
11  b_col3    bc
12  c_col3    cc
13  d_col3    dc
14  e_col3    ec

或者,您可以在之后對值進行排序:

x = x.sort_values(by="Value").reset_index(drop=True)
print(x)

     Value Col 1
0   a_col1    aa
1   a_col2    ab
2   a_col3    ac
3   b_col1    ba
4   b_col2    bb
5   b_col3    bc
6   c_col1    ca
7   c_col2    cb
8   c_col3    cc
9   d_col1    da
10  d_col2    db
11  d_col3    dc
12  e_col1    ea
13  e_col2    eb
14  e_col3    ec

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM