2017-05-30 35 views
2

我有一個包含4列(它們都是部件號)的數據幀。我只想讓這個數據框只有一列包含來自4個原始列的所有值(除去重複項)。這就是我所做的。我沒有收到任何錯誤消息,但由於某種原因,我在進行合併時不斷收到4列而不是1列。首先我寫這個:在包含4列的數據框中創建只有1列的數據幀

Supplier_Part_No = Supplier_Part_Numbers_Rename[['Supplier_Part_No']].copy() 
Supplier_Part_No_1 = Supplier_Part_Numbers_Rename[['Supplier_Part_No..1']].copy() 
Supplier_Part_No_2 = Supplier_Part_Numbers_Rename[['Supplier_Part_No..2']].copy() 
Supplier_Part_No_3 = Supplier_Part_Numbers_Rename[['Supplier_Part_No..3']].copy() 

那創建了4個數據幀。然後,我將它們合併,以便在數據框中獲得單個列。我不知道爲什麼它一直給我4,我也嘗試做軸1,沒有幫助。不知道爲什麼它不給我只有1列,而是4而不是:

Supplier_Parts_Combined = pd.concat([Supplier_Part_No, Supplier_Part_No_1,Supplier_Part_No_2, Supplier_Part_No_3], axis = 0) 

Supplier_Parts_Combined 
+0

你想在一列中的所有值用逗號隔開? – Vaishali

+0

不,我不希望任何類型的任何分離,但是所有在1列 – mkheifetz

回答

1

這是你想要的嗎?

df = pd.DataFrame(np.random.randint(0,5,size=(5, 4)), columns=list('ABCD')) 

    A B C D 
0 1 4 2 2 
1 4 0 3 2 
2 1 0 1 0 
3 3 4 3 4 
4 0 2 4 2 


df['merged'] = df.astype(str).apply(lambda x: ''.join(set(x)), axis = 1) 

    A B C D new 
0 1 4 2 2 241 
1 4 0 3 2 2430 
2 1 0 1 0 01 
3 3 4 3 4 43 
4 0 2 4 2 204 

編輯:

考慮這個df,可以

df = pd.DataFrame({'val1': ['abc', np.nan], 'val2': ['xyz', 'pqr'], 'val3': ['lmn', 'abc'], 'val4': [np.nan, np.nan]}) 

    val1 val2 val3 val4 
0 abc  xyz  lmn  NaN 
1 NaN  pqr  abc  NaN 

x = df.values.ravel() 
np.unique(x[~pd.isnull(x)]) 

會給你

array(['abc', 'lmn', 'pqr', 'xyz'], dtype=object) 
+0

我不知道我遵循你想做什麼,我試圖做到這一點:Supplier_Part I Supplier_Part_2供應商部分_3 – mkheifetz

+0

我加入所有使用''.join每行中的唯一值。仍然不確定那是你想要的 – Vaishali

+0

如果你在問題中發佈了df.head(), – Vaishali

0

只需使用pandas.melt其重塑數據長格式的變量名(原列名)和值列(以前的寬格式列值)。由於您只想沒有來港的一列,用dropna[[..]]索引:

from io import StringIO 
import pandas as pd 

txt = """ 
Supplier_Part_1  Supplier_Part_2  Supplier_Part_3   
abc      cde      NA 
NA       gbc      NA 
""" 

df = pd.read_table(StringIO(txt), sep="\s+") 
print(df) 

# Supplier_Part_1 Supplier_Part_2 Supplier_Part_3 
# 0    abc    cde    NaN 
# 1    NaN    gbc    NaN 


rdf = pd.melt(df, var_name="Supplier_Part_ID", value_name="Supplier_Part").\ 
       dropna().reset_index()[['Supplier_Part']] 
print(rdf) 

# Supplier_Part 
# 0   abc 
# 1   cde 
# 2   gbc 
相關問題