合并Dataframe(熊猫)中的所有列-python3 [重复]
Posted
技术标签:
【中文标题】合并Dataframe(熊猫)中的所有列-python3 [重复]【英文标题】:combine all columns in Dataframe (pandas) - python3 [duplicate] 【发布时间】:2021-03-29 15:40:10 【问题描述】:我正在尝试将所有列中的所有数据合并为一列。像这样:
A B C X
1 2 3 123
3 2 1 --> 321
5 6 7 567
请记住,我们不知道列数和行数。
我尝试这样解决它,但它不起作用。
db.assign(sum = db.apply(''.join, axis = 1)).drop([db.index], axis = 1)
提前致谢
【问题讨论】:
【参考方案1】:这行得通吗?
df.astype(str).sum(axis=1).astype(int)
给定:
df = pd.DataFrame('A':[1,3,5],'B':[2,2,6],'C':[3,1,7])
结果:
A B C X
0 1 2 3 123
1 3 2 1 321
2 5 6 7 567
【讨论】:
很酷的一个(已经赞成),但字符串连接很慢,这会为每个连接构建一个新字符串。对于大型 dfs 可能效率不高 @Chester 我同意!还有更有效的方法。df.astype(str).agg(''.join, axis=1)
可能更快, sum 执行成对连接(因为字符串是不可变的)。【参考方案2】:
我们可以使用np.geomspace
和df.mul
然后df.sum
c = df.shape[1]
end = 10**(c-1)
df['X'] = df.mul(np.geomspace(end, 1, num=c)).sum(1)
A B C X
0 1 2 3 123.0
1 3 2 1 321.0
2 5 6 7 567.0
时间分析:
基准设置:
vals = np.random.randint(2, 10, (100_000, 6))
df = pd.DataFrame(vals)
In [93]: %%timeit
...: df.astype(str).sum(axis=1).astype(int)
...:
...:
419 ms ± 3.63 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [94]: %%timeit
...: c = df.shape[1]
...: end = 10**(c-1)
...: df.mul(np.geomspace(end, 1, num=c)).sum(1)
...:
...:
8.02 ms ± 170 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
【讨论】:
在这里使用算术非常优雅,干得好! 这是一个经过深思熟虑的技巧!以上是关于合并Dataframe(熊猫)中的所有列-python3 [重复]的主要内容,如果未能解决你的问题,请参考以下文章