重新格式化存储在数组中的数字

-1 投票
1 回答
43 浏览
提问于 2025-04-11 22:59

输入的数据是:

输入的示例数据

需要的输出是:

这里输入图片描述

请问这能仅通过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_axisidx 设置为索引,然后应用 Series.unstack,最后用 Series.reindex 来添加缺失的索引值(这些值会是 np.nan)。

撰写回答