【发布时间】:2020-10-18 02:36:01
【问题描述】:
我想创建一个数据框,将当年的月份加上前一年的月份加到 12 个月。我还要删除行,因此逐行检查并删除垃圾行。
两个 Excel 工作表已导入数据框:
输入:df_ExcelSheet2019
jan-19 feb-19 mar-19 apr-19 may-19 ... sep-19 oct-19 nov-19 dec-19
row_name 1 0.1 0.12 0.55 0.54 0.44 ... 0.72 0.44 0.37 0.55
row_name 2 0.2 0.24 0.22 0.55 0.41 ... 0.66 0.15 0.51 0.42
row_name 3 0.3 0.54 0.65 0.32 0.38 ... 0.33 0.66 0.89 0.74
<garbage>
row_name 5 0.4 0.53 0.17 0.53 0.81 ... 0.73 0.44 0.16 0.21
row_name 6 0.5 0.55 0.75 0.83 0.48 ... 0.68 0.16 0.57 0.11
输入:df_ExcelSheet2020
jan-20 feb-20 mar-20 apr-20 may-20 ... sep-20 oct-20 nov-20 dec-20
row_name 1 0.1 0.12 0.55 0.54 0.44 ... 0.72 0.44 0.37 0.55
row_name 2 0.2 0.24 0.22 0.55 0.41 ... 0.66 0.15 0.51 0.42
row_name 3 0.3 0.54 0.65 0.32 0.38 ... 0.33 0.66 0.89 0.74
<garbage>
row_name 5 0.4 0.53 0.17 0.53 0.81 ... 0.73 0.44 0.16 0.21
row_name 6 0.5 0.55 0.75 0.83 0.48 ... 0.68 0.16 0.57 0.11
想要的结果:
df_final(例如,2020 年的前 6 个月和 2019 年的最后 6 个月)
jun-19 jul-19 aug-19 sep-19 oct-19 ... feb-20 mar-20 apr-20 may-20
row_name 1 0.51 0.65 0.42 0.72 0.44 ... 0.12 0.55 0.54 0.44
row_name 2 0.32 0.78 0.61 0.66 0.15 ... 0.24 0.22 0.55 0.41
row_name 3 0.53 0.11 0.45 0.33 0.66 ... 0.54 0.65 0.32 0.38
row_name 4 0.74 0.12 0.68 0.73 0.44 ... 0.53 0.17 0.53 0.81
row_name 5 0.57 0.23 0.56 0.68 0.16 ... 0.55 0.75 0.83 0.48
代码:
row_data = []
#col - is an offset declared above based the Excel sheet structure
#currentYearFormat - a list of rows I want, garbage rows removed
for item in currentYearFormat:
row = item[2] - 2 # 1 for 1to0 conversion and 1 because pandas ignores blank rows
print("row: ",row)
#copy elements from Previous sheet
row_data = [df_previousYearOIR.iloc[row,col-previousYearMonths+12:col+12]]
print("row name: " item[0])
print("previous: \n", row_data)
print("\n")
#take elements from Current sheet and extend row_data
row_data += [df_currentYearOIR.iloc[row,col:col+currentYearMonths]]
print("extended: \n", row_data)
当前结果:
row: 2
row name: row_name 1
previous:
[Unnamed: 18 0.31
Unnamed: 19 0.38
Unnamed: 20 0.43
Unnamed: 21 0.72
Unnamed: 22 0.44
Unnamed: 23 0.37
Unnamed: 24 0.55
Name: 2, dtype: object]
extended:
[Unnamed: 18 0.31
Unnamed: 19 0.38
Unnamed: 20 0.43
Unnamed: 21 0.72
Unnamed: 22 0.44
Unnamed: 23 0.37
Unnamed: 24 0.55
Name: 2, dtype: object, Unnamed: 13 0.5
Unnamed: 14 0.1
Unnamed: 15 0.12
Unnamed: 16 0.55
Unnamed: 17 0.54
Name: 2, dtype: object]
【问题讨论】:
-
请提供minimal reproducible example。 我想创建一个数据框,将当年的月份加上前一年的月份加到 12 个月。 你能扩展一下吗?我不确定我是否理解您要执行的操作。
-
Ex - 我想要来自去年数据的数据框中的最后 6 个月数据(7 月至 12 月)和今年数据框(1 月至 6 月)中的第一个 6 个月数据。我想将该数据放入一个新的数据框中。我需要逐行(与 enmass)抓取数据以删除垃圾行。
-
@kalmdown 您可以从 2019 df 和 2020 df 中选择所需的列,然后删除每个 dfs 中的垃圾行,然后连接这两个数据帧。或者在加入 2019 df 和 2020 df 的选定列后删除垃圾行。
-
您的每月数据实际上是在列中,而不是在行中。所以你真的想对 columns Jan-Jun 2020 进行切片并将它们按列连接
pd.concat(..., axis=1)它到 Jul-Dec 2019。 -
@kalmdown 那仍然不是minimal reproducible example。另外,请以更方便的格式分享数据。