我有一个电子表格,其中有不同列的城市记录,分布在不同的行上
例如,这是我的数据集
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
(重复项已删除)
我不确定我的方法是否是理想的方法,或者是否有更好的方法
答案 0 :(得分:3)
stack
和drop_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