Python中的透视表

2024-10-02 04:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,因此我需要您在以下方面的帮助:

我有两个表(数据帧):

表1包含了所有数据,如下所示:

Table1

GenDate列有生成日期。 日期列有日期。 D列及以后的列具有不同的值

我还有下表:

Table 2

第一列有“关键字”,可以在表1的标题中找到 K列的日期应该在表1的C列中

我的目标是生成如下表:

Table 3

为了便于说明,我省略了几列。你知道吗

表1上的每一列都应该根据写在标题上的类型进行拆分。你知道吗

例如,周:周对应于3个部分,第1周、第2周和第3周

每个裂缝都有一个特定的日期。你知道吗

在新表中,应使用\和拆分名称创建3列:

第一周、第二周和第三周。你知道吗

对于这些列中的每一列,应使用与每次拆分日期相对应的值。你知道吗

我希望这个解释是好的。你知道吗

谢谢


Tags: 数据名称标题类型目标关键字省略裂缝
1条回答
网友
1楼 · 发布于 2024-10-02 04:28:36

您可以使用以下代码获得所需的表(遵循注释并检查pandaapi参考以了解所使用的函数):

import numpy as np
import pandas as pd

# initial data
t_1 = pd.DataFrame(
    {'GenDate': [1, 1, 1, 2, 2, 2],
     'Date': [10, 20, 30, 10, 20, 30],
     'A_Days': [11, 12, 13, 14, 15, 16],
     'B_Days': [21, 22, 23, 24, 25, 26],
     'A_Weeks': [110, 120, 130, 140, np.NaN, 160],
     'B_Weeks': [210, 220, 230, 240, np.NaN, 260]})
# initial data
t_2 = pd.DataFrame(
    {'Type': ['Days', 'Days', 'Days', 'Weeks', 'Weeks'],
     'Split': ['Day1', 'Day2', 'Day3', 'Week1', 'Week2'],
     'Date': [10, 20, 30, 10, 30]})

# create multiindex
t_1 = t_1.set_index(['GenDate', 'Date'])
# pivot 'Date' level of MultiIndex - unstack it from index to columns
# and drop columns with all NaN values
tt_1 = t_1.unstack().dropna(axis=1)

# tt_1 is what you need with multi-level column labels

# map to rename columns
t_2 = t_2.set_index(['Type'])
mapping = {
    type_: dict(zip(
        t_2.loc[type_, :].loc[:, 'Date'],
        t_2.loc[type_, :].loc[:, 'Split']))
    for type_ in t_2.index.unique()}

# new column names
new_columns = list()
for letter_type, date in tt_1.columns.values:
    letter, type_ = letter_type.split('_')
    new_columns.append('{}_{}'.format(letter, mapping[type_][date]))

tt_1.columns = new_columns

相关问题 更多 >

    热门问题