我有一个 CSV 文件,其中包含每个变量的 min
和 max
值,如下所示:
original = """
min_a max_a min_b max_b
3 5 1 9
"""
第一行按变量名称排序,因此保证它从 min_a
到 max_z
。我想将它 reshape /融化成 block ,如下所示:
goal = """
min max
a 3 5
b 1 9
"""
我怎样才能做到这一点?我感觉像pandas.melt或者可以在这里使用 numpy 方法,但不知道如何使用。我当前的“黑客”是按如下方式 reshape 第二行值,然后将结果复制粘贴或写入 CSV:
orig = "3 5 1 9"
temp = orig.split()
chopped = [" ".join(temp[i:i+2]+["\n"]) for i in range(0,3,2)]
# chopped: ['3', '5', '1', '9']
ready = [" min max \n"] + [" ".join(e) for e in zip(['a','b'],chopped)]
# ready: [' min max \n', 'a 3 5 \n', 'b 1 9 \n']
flipped = "".join(ready)
# flipped: ' min max \na 3 5 \nb 1 9 \n'
print(flipped)
# Result:
# min max
# a 3 5
# b 1 9
有正确的方法吗?谢谢!
最佳答案
通过split
创建MultiIndex
,然后可以使用stack
:
df.columns = df.columns.str.split('_', expand=True)
df = df.stack().reset_index(level=0, drop=True)
print (df)
max min
a 5 3
b 9 1
设置:
original = """
min_a max_a min_b max_b
3 5 1 9
"""
df = pd.read_csv(pd.compat.StringIO(original), sep="\s+")
print (df)
min_a max_a min_b max_b
0 3 5 1 9
1 4 6 2 10
关于python - 如何切割和 reshape /融化表格或 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49044235/