numpy 在pandas中透视数据框,同时为值创建额外的新列

e0bqpujr  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(77)

我有一个这样的表:
| 联系我们|最后的名字|出生日期|2022年1月1日|2022年2月1日|2022年3月1日|2022年4月1日|开始日期|结束日期| End Date |
| --|--|--|--|--|--|--|--|--| ------------ |
| 万达|样品|2020年1月1日|很好,很好|很好,很好|很好,很好|很好,很好|2022年1月1日|2022年1月31日| 1/31/2022 |
我想将数据透视成这样:
| 生效日期|联系我们|最后的名字|出生日期|工作状态|开始日期|结束日期| End Date |
| --|--|--|--|--|--|--| ------------ |
| 2022年1月1日|万达|样品|2020年1月1日|很好,很好|2022年1月1日|2022年1月31日| 1/31/2022 |
| 2022年2月1日|万达|样品|2020年1月1日|很好,很好|2022年1月1日|2022年1月31日| 1/31/2022 |
| 2022年3月1日|万达|样品|2020年1月1日|很好,很好|2022年1月1日|2022年1月31日| 1/31/2022 |
| 2022年4月1日|万达|样品|2020年1月1日|很好,很好|2022年1月1日|2022年1月31日| 1/31/2022 |
实际上,这会将单独标注日期的列转换为一个名为“Status”的列和包含单独日期的行。
我从这段基本代码开始,但是在创建新列并将值赋给它们各自的列的语法中遇到了麻烦。

import pandas as pd
import numpy as np

df = pd.read_csv(r'C:\Users\User\sample.csv')
df.pivot_table(columns=['Effective Date','First Name','Last Name','Date of Birth','Status','Start Date','End Date'],values=['1/1/2022','2/1/2022','3/1/2022','4/1/2022'], aggfunc=np.max)
df.head

字符串

hs1rzwqc

hs1rzwqc1#

尝试melt

df.melt(['ID', 'First Name', 'Last Name', 'Date of Birth', 'Start Date', 'End Date'], 
        var_name='Effective Date', value_name='Status')

字符串
输出量:

ID First Name Last Name Date of Birth Start Date   End Date Effective Date Status
0  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       1/1/2022   Good
1  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       2/1/2022   Good
2  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       3/1/2022   Good
3  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       4/1/2022   Good

ct3nt3jp

ct3nt3jp2#

你可以尝试.set_index() + .stack() + .reset_index()。然后重命名列:

df = df.set_index(['ID', 'First Name', 'Last Name', 'Date of Birth', 'Start Date', 'End Date']).stack().reset_index(name='Status').rename(columns={'level_6': 'Effective Date'})
print(df)

字符串
印刷品:

ID First Name Last Name Date of Birth Start Date   End Date Effective Date Status
0  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       1/1/2022   Good
1  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       2/1/2022   Good
2  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       3/1/2022   Good
3  MO12      Wanda    Sample      1/1/2020   1/1/2022  1/31/2022       4/1/2022   Good

相关问题