我完全是Python的新手,目前我遇到了一个简单但棘手的情况。有没有可能去掉所有这些零,然后重新排列列:
A B C D E F 10 10 5 0 0 0 0 0 0 13 3 4 0 13 41 55 0 0 0 0 31 30 21 0 11 19 20 0 0 0
字符串变成这样:
A B C 10 10 5 13 3 4 13 41 55 31 30 21 11 19 20
型
t9aqgxwy1#
假设所有行都有相同数量的零:
a = df.to_numpy() a = a[a!=0].reshape(-1,3)
个字符
luaexgnf2#
你可以在列中使用apply numpy的trim_zeros:注意,这里的假设是,你的零是每行的头或尾
cleaned = np.apply_along_axis(np.trim_zeros, 1, df.to_numpy()) pd.DataFrame(cleaned, columns=df.columns[: cleaned.shape[-1]]) A B C 0 10 10 5 1 13 3 4 2 13 41 55 3 31 30 21 4 11 19 20
字符串
y0u0uwnf3#
我们可以使用stack和cumcount来重新创建列。首先,让我们使用mask将任何0转换为NaN值,默认情况下,这些值会被删除在stack中:
stack
cumcount
mask
0
NaN
from string import ascii_uppercase #for your columns. letters = dict(enumerate(list(ascii_uppercase))) s = df.mask(df.eq(0)).stack().reset_index(1,drop=True).to_frame() df1 = ( s.set_index(s.groupby(level=0).cumcount().map(letters), append=True) .unstack(1) .droplevel(0, 1) ) print(df1) A B C 0 10 10 5 1 13 3 4 2 13 41 55 3 31 30 21 4 11 19 20
3条答案
按热度按时间t9aqgxwy1#
假设所有行都有相同数量的零:
个字符
luaexgnf2#
你可以在列中使用apply numpy的trim_zeros:
注意,这里的假设是,你的零是每行的头或尾
字符串
y0u0uwnf3#
我们可以使用
stack
和cumcount
来重新创建列。首先,让我们使用
mask
将任何0
转换为NaN
值,默认情况下,这些值会被删除在stack
中:字符串