2016-07-22 57 views
1

我有下面的數據框'df',基於我想創建一個新的df'new_df'。我有一些麻煩得到新的DF。Python Pandas:基於兩列在dataFrame中創建新行

Cust-id Sex Country Orders   Products 
0 'Cu1' 'F' 'FR' 'ord1 + ord2'  'A+G' 
1 'Cu2' 'M' 'US' 'ord3'   'C' 
2 'Cu3' 'M' 'UK' 'ord4 + ord5'  'H+Z' 
3 'Cu4' 'F' 'RU' 'ord6'   'K' 
4 'Cu5' 'M' 'US' 'ord7'   'T' 
5 NaN  'M' 'UK' 'ord#'   'K' 
6 'Cu6' 'F' 'US' 'ord8+ord9+ord10' 'R+D+S' 
7 'Cu7' 'M' 'UK' 'ord11'   'A' 

我想'new_df'爲每個'訂單'與相應的'產品'包含一行。所有其他列保留其內容。另外,如果'Cust-id'列中的行是NaN,那麼應該刪除完整的行(即不存在於新的df中)。這將給以下new_df:

Cust-id Sex Country Orders Products 
0 'Cu1' 'F' 'FR' 'ord1'  'A' 
1 'Cu1' 'F' 'FR' 'ord2'  'G' 
2 'Cu2' 'M' 'US' 'ord3'  'C' 
3 'Cu3' 'M' 'UK' 'ord4'  'H' 
4 'Cu3' 'M' 'UK' 'ord5'  'Z' 
5 'Cu4' 'F' 'RU' 'ord6'  'K' 
6 'Cu5' 'M' 'US' 'ord7'  'T' 
7 'Cu6' 'F' 'US' 'ord8'  'R' 
8 'Cu6' 'F' 'US' 'ord9'  'D' 
9 'Cu6' 'F' 'US' 'ord10' 'S' 
10 'Cu7' 'M' 'UK' 'ord11' 'A' 

任何幫助/指導表示讚賞。

回答

0

您可以使用:

​​
#delete old columns, join df1, drop df if NaN in Cust-id 
print(df.drop(['Orders', 'Products'], axis=1) 
     .join(df1) 
     .dropna(subset=['Cust-id']) 
     .reset_index(drop=True)) 

    Cust-id Sex Country Orders Products 
0 'Cu1' 'F' 'FR' 'ord1'  'A' 
1 'Cu1' 'F' 'FR' 'ord2'  'G' 
2 'Cu2' 'M' 'US' 'ord3'  'C' 
3 'Cu3' 'M' 'UK' 'ord4'  'H' 
4 'Cu3' 'M' 'UK' 'ord5'  'Z' 
5 'Cu4' 'F' 'RU' 'ord6'  'K' 
6 'Cu5' 'M' 'US' 'ord7'  'T' 
7 'Cu6' 'F' 'US' 'ord8'  'R' 
8 'Cu6' 'F' 'US' 'ord9'  'D' 
9 'Cu6' 'F' 'US' 'ord10'  'S' 
10 'Cu7' 'M' 'UK' 'ord11'  'A'  

的評論編輯:

使用concat創建df1

... 
... 
df1 = pd.concat([s1, s2], keys=('Orders', 'Products'), axis=1) 
print (df1) 
    Orders Products 
0 'A' 'ord1' 
0 'G' 'ord2' 
1 'C' 'ord3' 
2 'H' 'ord4' 
2 'Z' 'ord5' 
3 'K' 'ord6' 
4 'T' 'ord7' 
5 'K' 'ord#' 
6 'R' 'ord8' 
6 'D' 'ord9' 
6 'S' 'ord10' 
7 'A' 'ord11' 

print(df.drop(['Orders', 'Products'], axis=1) 
     .join(df1) 
     .dropna(subset=['Cust-id']) 
     .reset_index(drop=True)) 

    Cust-id Sex Country Orders Products 
0 'Cu1' 'F' 'FR' 'A' 'ord1' 
1 'Cu1' 'F' 'FR' 'G' 'ord2' 
2 'Cu2' 'M' 'US' 'C' 'ord3' 
3 'Cu3' 'M' 'UK' 'H' 'ord4' 
4 'Cu3' 'M' 'UK' 'Z' 'ord5' 
5 'Cu4' 'F' 'RU' 'K' 'ord6' 
6 'Cu5' 'M' 'US' 'T' 'ord7' 
7 'Cu6' 'F' 'US' 'R' 'ord8' 
8 'Cu6' 'F' 'US' 'D' 'ord9' 
9 'Cu6' 'F' 'US' 'S' 'ord10' 
10 'Cu7' 'M' 'UK' 'A' 'ord11' 
+0

感謝您的幫助jezrael,大加讚賞。創建df1時會出現ValueError(「不能從重複軸重新索引」)。任何想法如何解決這個問題? –

+0

然後嘗試'df = pd.concat([s1,s2],keys =('Orders','Products'),axis = 1)'抱歉,未經測試,因爲我只在手機上。 – jezrael

+0

非常感謝,但您的初始代碼似乎工作,我的數據中有錯誤。 –

-1

使用下面的代碼寫的DF爲csv將糾正錯誤

 df.dropna().to_csv('train1.csv') 

試試這個

相關問題