【问题标题】:Stack/Unstack Pandas Data Frame堆叠/取消堆叠 Pandas 数据框
【发布时间】:2023-01-11 16:25:26
【问题描述】:

我有以下数据集 Excel Dummy DataSet,它由 Excel 工作表中的多个表串联组成。它们都是垂直堆叠的。不同表的列是相同的,col_x, col_y, col_t,除了 Y 列会随着表的变化而变化(见下图)。

我以某种方式设法获得了输出。但是,我想知道是否有更简单|更高效如何做到这一点?

这是我试过的

import pandas as pd

# Import Data
path = r"/content/test_data.xlsx"
df_original = pd.read_excel(path, skiprows=4, usecols= range(0,4), header=None)
df_original.columns=["col_x","col_y","col_z","col_t"]

# Begining of the code
mask_col_x = df_original["col_x"] == "col_x"
df_break = df_original[mask_col_x]
index_break_list = df_break.index

range_list = []

for i, val in enumerate(index_break_list):

    if i < len(index_break_list)-1:

        span1 = (val+1,index_break_list[i+1],df_original["col_y"][val])

        range_list.append(span1)

    span1 = (val+1,len(df_original),df_original["col_y"][val])

range_list.append(span1)

dataframe_list = []

for elt in range_list:

    df_sub = df_original.iloc[elt[0]:elt[1]].copy()

    df_sub["Value y"] = elt[2]

    dataframe_list.append(df_sub)
 

new_df = pd.concat(dataframe_list,axis=0)

new_df.to_csv("test_data_result_combined.csv")

【问题讨论】:

  • 你可以分享文件吗?

标签: python pandas dataframe


【解决方案1】:

您可以通过 Series.cumsum 的掩码创建列 Value y,并通过 Series.cumsum 的累积和,然后通过 ~ 的反转掩码过滤掉行:

f_original.columns=["col_x","col_y","col_z","col_t"]

mask_col_x = df_original["col_x"] == "col_x"
df_original['Value y'] = 'y' + mask_col_x.cumsum().astype(str)
new_df = df_original[~mask_col_x]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-08-04
  • 2019-01-08
  • 1970-01-01
  • 2021-04-10
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多