python数字左对齐_python – 在pandas DataFrame中左对齐字符串值

首先,从项目开始提取一列列 –

m = df.columns.str.contains('item')

i = df.iloc[:, m]

屏蔽符合您标准的所有值.使用isin –

j = i[~i.isin(df.makrc.tolist() + ['not'])]

现在.根据NaN排序值并分配回来 –

df.loc[:, m] = j.apply(sorted, key=pd.isnull, axis=1)

df

key sellyr brand makrc item1 item2 item3 item4 item5 item6

0 da12 2013 imp apt furi NaN NaN NaN NaN NaN

1 da32 2013 sa rye app NaN NaN NaN NaN NaN

2 da14 2013 sa pro pan fan NaN NaN NaN NaN

细节

i

item1 item2 item3 item4 item5 item6

0 furi apt NaN NaN NaN NaN

1 rye app NaN NaN NaN NaN

2 not pro pan fan NaN NaN

j

item1 item2 item3 item4 item5 item6

0 furi NaN NaN NaN NaN NaN

1 NaN app NaN NaN NaN NaN

2 NaN NaN pan fan NaN NaN

迈向更好的表现

您可以使用适用于对象阵列的Divakar justified函数的修改版本 –

def justify(a, invalid_val=0, axis=1, side='left'):

"""

Justifies a 2D array

Parameters

----------

A : ndarray

Input array to be justified

axis : int

Axis along which justification is to be made

side : str

Direction of justification. It could be 'left', 'right', 'up', 'down'

It should be 'left' or 'right' for axis=1 and 'up' or 'down' for axis=0.

"""

if invalid_val is np.nan:

mask = pd.notnull(a)

else:

mask = a!=invalid_val

justified_mask = np.sort(mask,axis=axis)

if (side=='up') | (side=='left'):

justified_mask = np.flip(justified_mask,axis=axis)

out = np.full(a.shape, invalid_val, dtype=object)

if axis==1:

out[justified_mask] = a[mask]

else:

out.T[justified_mask.T] = a.T[mask.T]

return out

df.loc[:, m] = justify(j.values, invalid_val=np.nan, axis=1, side='left')

df

key sellyr brand makrc item1 item2 item3 item4 item5 item6

0 da12 2013 imp apt furi NaN NaN NaN NaN NaN

1 da32 2013 sa rye app NaN NaN NaN NaN NaN

2 da14 2013 sa pro pan fan NaN NaN NaN NaN

这应该(希望)比调用apply更快.使用针对数字数据优化的函数的原始版本,您将特别看到速度增益.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值