python - Python 中的数据透视表

标签 python python-3.x dataframe pivot-table

我对 Python 还很陌生,因此我需要您在以下方面提供帮助:

我有两个表(数据框):

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

Table1

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

我还有下表:

Table 2

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

我的目标是生成如下所示的表格:

Table 3

出于说明目的,我省略了几列。

表 1 中的每一列都应根据标题上写入的类型进行拆分。

例如。 A_Weeks:周对应 3 个分割,Week1、Week2 和 Week3

这些狭缝中的每一个都有一个特定的日期。

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

A_Week1、A_Week2 和 A_Week3。

对于每一列,应使用与每个拆分的日期相对应的值。

我希望解释是好的。

谢谢

最佳答案

您可以通过以下代码获取所需的表格(请关注注释并查看 panda api 引用以了解所使用的函数):

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

关于python - Python 中的数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739486/

相关文章:

python - 按对象将 pandas 组转换为多索引 Dataframe

python split() 关于空白的问题,有人可以解释一下吗?

python - 删除pandas中重复的汉字

python - 如何使用 Python 将 CUSTOM 元数据写入 JPEG?

python - 地球卫星下方的天空可见区域

python-3.x - WinError 10022 : An invalid argument was supplied, 我不明白为什么

python - subprocess.call 在 PyCharm (linux) 中不工作

python - 在 pandas 中,设置新列并更新现有列

python - 如何使用 QWebEngineView 打开下载文件对话框?

python - 如果没有返回值,则不要调用函数