输入为:
需要输出为:
这仅适用于 XL 格式吗?或者需要 python 脚本。 如果可以的话,你能帮忙写一下 python 脚本吗? 谢谢。
我的脚本: 我的逻辑是读取每个 df.col 并比较从 1 到 20 的值,如果相等则将其写出或写为空白。
import pandas as pd
df = pd.read_excel(r"C:\Users\my\scripts\test-file.xlsx")
print(df)
for column in df.columns[0:]:
print(df[column])
这是一种方法:
样本df
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({f'col_{i}': np.random.choice(range(1, 10), size=4, replace=False)
for i in range(1, 4)})
df
col_1 col_2 col_3
0 6 3 6
1 3 7 8
2 4 8 5
3 5 6 7
代码
max_value = df.values.max()
out = df.stack()
idx = pd.MultiIndex.from_arrays([out.index.get_level_values(1),
out.values])
out = (out
.set_axis(idx)
.unstack(0)
.reindex(range(1, max_value + 1))
)
out
col_1 col_2 col_3
1 NaN NaN NaN
2 NaN NaN NaN
3 3.0 3.0 NaN
4 4.0 NaN NaN
5 5.0 NaN 5.0
6 6.0 6.0 6.0
7 NaN 7.0 7.0
8 NaN 8.0 8.0
# write away to excel with `df.to_excel`
解释
max_value
中的最大值创建一个变量 (df
)(稍后用于重新索引)。df.stack
将所有列堆叠在一起 pd.Series
(此处:out
)。idx
创建一个新索引 (
pd.MultiIindex.from_arrays
)。对于第一个数组,从索引中选择第二个级别(使用:pd.MultiIndex.get_level_values
);对于第二个数组,使用 values。idx
将
Series.set_axis
设置为索引,应用 Series.unstack
,然后使用 Series.reindex
添加缺失的索引值(使用 np.nan
值)。