我熟悉标准的 Pandas 数据透视功能,但我想要做的有点不同 - 而且我不喜欢使用pivot
。
设置代码:
import pandas as pd
import io
csvA = io.StringIO(u'''
month chicken_a chicken_b chicken_c turkey_a turkey_b turkey_c
1 10 20 30 1 2 3
2 11 22 33 101 202 303
''')
dfA = pd.read_csv(csvA, sep = '\t')
其产量:
month chicken_a chicken_b chicken_c turkey_a turkey_b turkey_c
0 1 10 20 30 1 2 3
1 2 11 22 33 101 202 303
我想将'_a'、'_b'和'_c'
部分旋转到月份,但保留'chicken'和'turkey'标题。最终结果如下所示:
month chicken turkey
0 1a 10 1
1 1b 20 2
2 1c 30 3
3 2a 11 101
4 2b 22 202
5 2c 33 303
'_a', '_b', '_c'
部分始终是这样的,并且会提前知道。
我可以通过 for
循环破解这个问题,但我想知道是否有更 Pandas 的方式。
最佳答案
我找到了一个我不喜欢的解决方案,但仍然感觉有点老套,但没有循环,它可以完成工作。我绝对愿意接受更好的解决方案:
df = dfA.set_index('month').stack().reset_index()
df['month_type'] = df['month'].astype(str) + df['level_1'].str[-1:]
df['level_1'] = df['level_1'].str[:-2]
df = df.drop(['month'], axis = 1)
df = df.pivot(index = 'month_type', columns = 'level_1', values = 0)
df = pd.DataFrame(df.to_records())
关于python - Pandas:基于标题子字符串的部分枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54031511/