将多列合为一列,删除重复项

时间:2019-12-05 19:10:43

标签: python pandas dataframe

我有一个电子表格,其中有不同列的城市记录,分布在不同的行上

例如,这是我的数据集

df = pd.DataFrame([['Jersey City','NYC','Miami','Charlotte'],
   ['Santa Clara','Santa Barbara','NYC'],
   ['Jersey City','Miami']])

这就是我试图做的,首先是转置

df.transpose()

输出为

print(df.transpose().to_string())

             0              1            2
0  Jersey City    Santa Clara  Jersey City
1          NYC  Santa Barbara        Miami
2        Miami            NYC         None
3    Charlotte           None         None

(重复项已删除)

我不确定我的方法是否是理想的方法,或者是否有更好的方法

3 个答案:

答案 0 :(得分:3)

stackdrop_duplicates

# read CSV
# df = pd.read_csv('data.csv', sep=',' header=None)

df.stack().drop_duplicates().reset_index(drop=True)

0       Jersey City
1               NYC
2             Miami
3         Charlotte
4       Santa Clara
5     Santa Barbara
6       Jersey City
dtype: object

答案 1 :(得分:3)

使用:

pd.DataFrame(df.stack().unique())

输出

               0
0    Jersey City
1            NYC
2          Miami
3      Charlotte
4    Santa Clara
5  Santa Barbara

时间比较。

%%timeit
df.stack().drop_duplicates().reset_index(drop=True)
1.88 ms ± 132 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
pd.DataFrame(df.stack().unique())
1.12 ms ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 2 :(得分:1)

这将起作用:

数据

df = pd.DataFrame([['Jersey City','NYC','Miami','Charlotte'],
   ['Santa Clara','Santa Barbara','NYC'],
   ['Jersey City','Miami']])

print(df.to_string())

             0              1      2          3
0  Jersey City            NYC  Miami  Charlotte
1  Santa Clara  Santa Barbara    NYC       None
2  Jersey City          Miami   None       None

解决方案 (无论是否使用移调,您都可以得到相同的结果)

df.transpose().stack().drop_duplicates().reset_index(drop=True)

0      Jersey City
1      Santa Clara
2              NYC
3    Santa Barbara
4            Miami
5        Charlotte
dtype: object
df.stack().drop_duplicates().reset_index(drop=True)

0      Jersey City
1              NYC
2            Miami
3        Charlotte
4      Santa Clara
5    Santa Barbara