【发布时间】:2019-02-16 01:31:54
【问题描述】:
我有一个如下所示的数据框
A B
0 1 4
1 2 5
2 3 6
还有一个列表
names = ['x','y']
我想获得一个执行该列表并与该列表进行外部连接的数据框。期望的结果是:
A B name
0 1 4 x
1 1 4 y
2 2 5 x
3 2 5 y
4 3 6 x
5 3 6 y
【问题讨论】:
我有一个如下所示的数据框
A B
0 1 4
1 2 5
2 3 6
还有一个列表
names = ['x','y']
我想获得一个执行该列表并与该列表进行外部连接的数据框。期望的结果是:
A B name
0 1 4 x
1 1 4 y
2 2 5 x
3 2 5 y
4 3 6 x
5 3 6 y
【问题讨论】:
pd.DataFrame(
[r + (n,) for r in zip(*map(df.get, df)) for n in names],
columns=[*df.columns, *['name']]
)
A B name
0 1 4 x
1 1 4 y
2 2 5 x
3 2 5 y
4 3 6 x
5 3 6 y
【讨论】:
为merge 使用附加密钥
df.assign(key=1).merge(pd.DataFrame({'Name':names,'key':1})).drop('key',1)
Out[54]:
A B Name
0 1 4 x
1 1 4 y
2 2 5 x
3 2 5 y
4 3 6 x
5 3 6 y
【讨论】:
使用pd.concat:
res = pd.concat([df.assign(name=i) for i in names], ignore_index=True)
结果:
A B name
0 1 4 x
1 2 5 x
2 3 6 x
3 1 4 y
4 2 5 y
5 3 6 y
【讨论】: