python - Python中的从宽到长
问题描述
我有以下格式的数据,
nan = np.nan
df = pd.DataFrame(d)
d
在哪里
d = {'ID': {0: 1789, 1: 1872},
'Name': {0: 'A', 1: 'B'},
'June_2018_entity1_flag': {0: 1, 1: 1},
'July_2018_entity1_flag': {0: 1, 1: 1},
'August_2018_entity1_flag': {0: 0, 1: 1},
'September_2018_entity1_flag': {0: 0, 1: 1},
'October_2018_entity1_flag': {0: 0, 1: 1},
'November_2018_entity1_flag': {0: 0, 1: 1},
'December_2018_entity1_flag': {0: 0, 1: 1},
'January_2019_entity1_flag': {0: 0, 1: 1},
'February_2019_entity1_flag': {0: 0, 1: 1},
'March_2019_entity1_flag': {0: 0, 1: 1},
'April_2019_entity1_flag': {0: 0, 1: 1},
'May_2019_entity1_flag': {0: 0, 1: 1},
'June_2019_entity1_flag': {0: 0, 1: 1},
'June_2018_entity1_value': {0: 100.0, 1: 8000.0},
'July_2018_entity1_value': {0: 100.0, 1: 8000.0},
'August_2018_entity1_value': {0: 0.0, 1: 8000.0},
'September_entity1_2018_value': {0: nan, 1: 8000.0},
'October_2018_entity1_value': {0: nan, 1: 8000.0},
'November_2018_entity1_value': {0: nan, 1: 8000.0},
'December_2018_entity1_value': {0: nan, 1: 8000.0},
'January_2019_entity1_value': {0: nan, 1: 8000.0},
'February_2019_entity1_value': {0: nan, 1: 8000.0},
'March_2019_entity1_value': {0: nan, 1: 8000.0},
'April_2019_entity1_value': {0: nan, 1: 8000.0},
'May_2019_entity1_value': {0: nan, 1: 8000.0},
'June_2019_entity1_value': {0: nan, 1: 8000.0},
'July_2018_entity2_flag': {0: 0, 1: 0},
'August_2018_entity2_flag': {0: 0, 1: 0},
'September_2018_entity2_flag': {0: 0, 1: 0},
'October_2018_entity2_flag': {0: 0, 1: 0},
'November_2018_entity2_flag': {0: 0, 1: 0},
'December_2018_entity2_flag': {0: 0, 1: 0},
'January_2019_entity2_flag': {0: 0, 1: 0},
'February_2019_entity2_flag': {0: 0, 1: 0},
'March_2019_entity2_flag': {0: 0, 1: 0},
'April_2019_entity2_flag': {0: 0, 1: 0},
'May_2019_entity2_flag': {0: 0, 1: 0},
'June_2019_entity2_flag': {0: 0, 1: 0},
'July_2018_entity2_value': {0: 0, 1: 0},
'August_2018_entity2_value': {0: 0, 1: 0},
'September_2018_entity2_value': {0: 0, 1: 0},
'October_2018_entity2_value': {0: 0, 1: 0},
'November_2018_entity2_value': {0: 0, 1: 0},
'December_2018_entity2_value': {0: 0, 1: 0},
'January_2019_entity2_value': {0: 0, 1: 0},
'February_2019_entity2_value': {0: 0, 1: 0},
'March_2019_entity2_value': {0: 0, 1: 0},
'April_2019_entity2_value': {0: 0, 1: 0},
'May_2019_entity2_value': {0: 0, 1: 0},
'June_2019_entity2_value': {0: 0, 1: 0}}
我希望将其更改为以下格式,
我一直在尝试融化、pd.wide_to_long 等,但没有取得多大成功。有人可以帮我解决这个问题吗?
谢谢
解决方案
另一种方法stack
是pivot_table
s = df.set_index(['ID', 'Name']).stack().reset_index()
x = s['level_2'].str.split('_')
s['col1'] = x.str[0] + x.str[1]
s['col2'] = x.str[2] + x.str[3]
s.drop('level_2', 1).pivot_table(columns='col2', values=0, index=['Name', 'col1'])
推荐阅读
- xml - Visual Studio Code 与 HTML 一样自动关闭标记和缩进 XML
- kotlin - 从 char 转换为运算符 Kotlin
- python - 罗宾汉 API Python
- haskell - 例外:ubuntu 上的用户错误(未知 GLUT 条目 glutInit)
- c - 如何通过批处理文件重命名具有数字后缀的文件
- javascript - D3 条形图未正确调整大小
- javascript - 使用 WordPress 的 MailChimp 订阅者弹出式迁移不起作用
- python-3.x - TensorFlow 1.9 是否支持 Python 3.7
- java - 使用 Jersey SSE 触发和输出事件
- c++ - BFS对节点的级别确定