如何切割和重塑/融化表格或CSV文件

问题描述 投票:1回答:1

我有一个CSV文件,其中包含每个变量的minmax值,如下所示:

original = """
min_a max_a min_b max_b
3 5 1 9
"""

第一行按变量名排序,因此保证它从min_amax_z。我想像块一样重塑/融化它:

goal = """
 min max
a 3 5
b 1 9
"""

我怎样才能做到这一点?我觉得pandas.melt或numpy方法可以在这里使用,但无法弄清楚如何。我目前的“黑客”是重塑第二行值,如下所示,并将结果复制粘贴或写入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 

有没有正确的方法呢?谢谢!

python string pandas csv numpy
1个回答
2
投票

通过MultiIndex创建split然后可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.