我有一个Pandas数据框,如下所示:
name1 country1 name2 country2
A GER B USA
C GER E GER
D GER Y AUS
E GER A USA
我希望获得一个包含两列name
和country
的新数据框,其中包含唯一的(name1, country1)
和(name2,country2)
对。
预期结果应如下所示:
name country
A GER
C GER
D GER
E GER
B USA
A USA
Y AUS
我在单列here中找到了类似的内容。但是,我不知道如何将此解决方案转换为我的问题,即成对的列。
答案 0 :(得分:2)
首先按filter
过滤列,转置,展平值并按构造函数创建新的DataFrame
:
a = df.filter(like='name').values.T.ravel()
b = df.filter(like='country').values.T.ravel()
df = pd.DataFrame({'name':a, 'country':b}, columns=['name','country'])
print (df)
name country
0 A GER
1 C GER
2 D GER
3 E GER
4 B USA
5 E GER
6 Y AUS
7 A USA
另一个未记录的函数lreshape
的解决方案:
df = pd.lreshape(df, {'name':['name1','name2'],
'country':['country1','country2']})
print (df)
name country
0 A GER
1 C GER
2 D GER
3 E GER
4 B USA
5 E GER
6 Y AUS
7 A USA
最后对于唯一对使用drop_duplicates
:
df = df.drop_duplicates()
print (df)
name country
0 A GER
1 C GER
2 D GER
3 E GER
4 B USA
6 Y AUS
7 A USA