我有一个包含4列的数据框(它们都是部件号)。我想要的只是这个数据帧只有1列包含4个原始列的所有值(删除重复项除外)。这就是我所做的。我没有收到任何错误消息,但由于某种原因,我在进行合并时不断获得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 :(得分: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)
答案 1 :(得分:0)
只需使用pandas.melt将数据重新整形为长格式,并使用变量名称(以前的列名称)和值列(以前的宽格式列值)。由于您只需要一列没有NAs,因此请使用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