我有一个Pandas的数据框,像这样:
Column1 Column2 Column3 Column4 Column5
0 a 1 2 3 4
1 a 3 4 5
2 b 6 7 8
3 c 7 7
我现在要做的是获取一个包含Column1和一个新columnA的新 Dataframe 。这个columnA应该包含从列2到列n(其中n是从列2到行末的列数)的所有值,如下所示:
Column1 ColumnA
0 a 1,2,3,4
1 a 3,4,5
2 b 6,7,8
3 c 7,7
我怎样才能最好地处理这个问题?
4条答案
按热度按时间bfnvny8b1#
您可以调用
apply
,将axis=1
按行传递到apply
,然后将dtype转换为str
和join
:这里我调用
dropna
来去掉NaN
,但是我们需要再次强制转换为int
,这样我们就不会把float作为str。mfuanj7w2#
我建议使用
.assign
它很简单,也许很长,但对我很有效
7uzetpgm3#
如果您有很多列,比如说 Dataframe 中有1000列,并且您希望基于
particular column name
合并几列,例如,正在讨论的-Column2
和该列之后的任意列数(例如,这里是'Column2
之后的3列,包括OP要求的Column2
)。我们可以使用
.get_loc()
得到列的位置-答案为here要删除
NaN
,请使用.dropna()
或.fillna()
希望能有所帮助!
gev0vcfq4#
apply()比agg()慢100倍
不要使用apply,因为它的伸缩性不好。请改用df.agg()。使用apply()将花费几秒钟,但agg()将花费几毫秒(ms)。
下面是一个例子:
从这个示例中可以看到,apply()平均花费了3.47秒,而agg()平均花费了34.8毫秒,随着数据的增加,性能上差距会越来越大。