我是Python的新手,因此我需要您提供以下帮助:
我有两个表(数据框):
表1包含所有数据,看起来像这样:
GenDate列具有生成日期。 日期列中有日期。 D列及以后的列具有不同的值
我还有下表:
第一列具有“关键字”,可以在表1的标题中找到 K列的日期应在表1的C列中。
我的目标是产生一个如下表:
出于说明目的,我省略了几列。
表1上的每一列都应根据写在页眉上的类型进行拆分。
例如A_Weeks:“周”对应于3个拆分,第1周,第2周和第3周
这些缝隙中的每个缝隙都有一个特定的日期。
在新表中,应使用A_创建3列,然后使用拆分名称:
A_Week1,A_Week2和A_Week3。
对于这些列中的每一列,都应使用与每个拆分的日期相对应的值。
我希望解释是好的。
谢谢
答案 0 :(得分:1)
您可以使用以下代码获得所需的表(遵循注释并查看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