重新格式化存储在数组中的数字
输入的数据是:
需要的输出是:
请问这能仅通过Excel格式实现,还是需要用Python脚本?如果可以的话,能帮我写个Python脚本吗?谢谢。
我的脚本:
我的逻辑是读取每一列的数据,然后比较值是否在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])
1 个回答
0
这里有一种方法:
示例数据框
import pandas as pd
import numpy as np
np.random.seed(0) # for reproducibility
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
)。 - 然后,使用
pd.MultiIndex.from_arrays
创建一个新的索引(idx
)。对于第一个数组,选择索引的第二层(可以用pd.MultiIndex.get_level_values
);对于第二个数组,使用实际的 值。 - 现在,使用
Series.set_axis
将idx
设置为索引,然后应用Series.unstack
,最后用Series.reindex
来添加缺失的索引值(这些值会是np.nan
)。