- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 excel 数据,我想将其转换为下面提到的预期平面格式。在预期的格式中,我不想包含聚合列,例如差异和总计。请帮助我使用 python Pandas Dataframe 或 Pyspark Dataframe 完成它。
Excel 中的输入数据为:
预期的最终格式为
df 是我在输入数据上的 Pandas 数据框。下面是输出
df = pd.read_excel("D:/StackOverflow.xlsx",sheet_name = 'Input')
Data Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6
0 Type Domestic NaN NaN International NaN NaN
1 Unit/Subunit Jan Feb Diff Jan Feb Diff
2 NaN 2020 2021 NaN 2020 2021 NaN
3 Unit1 NaN NaN NaN NaN NaN NaN
4 SubUnit11 100 130 30 5000 8000 3000
5 SubUnit12 50 80 30 1000 4000 3000
6 SubUnit13 1000 1100 100 100000 100010 10
7 Total Unit1 1150 1310 160 106000 112010 6010
8 Unit2 NaN NaN NaN NaN NaN NaN
9 SubUnit21 1100 1130 30 15000 81100 66100
10 SubUnit22 150 180 30 11000 42000 31000
11 SubUnit23 11000 1110 -9890 1001000 1022010 21010
12 Total Unit2 12250 2420 -9830 1027000 1145110 118110
print (df.index.tolist()[:3])
[0, 1, 2]
print (df.columns.tolist()[:3])
['Data', 'Unnamed: 1', 'Unnamed: 2']
print (df.head(10).to_dict())
{'Data': {0: 'Type', 1: 'Unit/Subunit', 2: nan, 3: 'Unit1', 4: 'SubUnit11', 5: 'SubUnit12', 6: 'SubUnit13', 7: 'Total Unit1', 8: 'Unit2', 9: 'SubUnit21'}, 'Unnamed: 1': {0: 'Domestic ', 1: 'Jan', 2: 2020, 3: nan, 4: 100, 5: 50, 6: 1000, 7: 1150, 8: nan, 9: 1100}, 'Unnamed: 2': {0: nan, 1: 'Feb', 2: 2021, 3: nan, 4: 130, 5: 80, 6: 1100, 7: 1310, 8: nan, 9: 1130}, 'Unnamed: 3': {0: nan, 1: 'Diff', 2: nan, 3: nan, 4: 30, 5: 30, 6: 100, 7: 160, 8: nan, 9: 30}, 'Unnamed: 4': {0: 'International', 1: 'Jan', 2: 2020, 3: nan, 4: 5000, 5: 1000, 6: 100000, 7: 106000, 8: nan, 9: 15000}, 'Unnamed: 5': {0: nan, 1: 'Feb', 2: 2021, 3: nan, 4: 8000, 5: 4000, 6: 100010, 7: 112010, 8: nan, 9: 81100}, 'Unnamed: 6': {0: nan, 1: 'Diff', 2: nan, 3: nan, 4: 3000, 5: 3000, 6: 10, 7: 6010, 8: nan, 9: 66100}}
df1 = pd.read_excel("D:/StackOverflow.xlsx",sheet_name = 'Input',header = [1,2,3])
Type Domestic International
Unit/Subunit Jan Feb Diff Jan Feb Diff
Unnamed: 0_level_2 2020 2021 Unnamed: 3_level_2 2020 2021 Unnamed: 6_level_2
0 Unit1 NaN NaN NaN NaN NaN NaN
1 SubUnit11 100.0 130.0 30.0 5000.0 8000.0 3000.0
2 SubUnit12 50.0 80.0 30.0 1000.0 4000.0 3000.0
3 SubUnit13 1000.0 1100.0 100.0 100000.0 100010.0 10.0
4 Total Unit1 1150.0 1310.0 160.0 106000.0 112010.0 6010.0
5 Unit2 NaN NaN NaN NaN NaN NaN
6 SubUnit21 1100.0 1130.0 30.0 15000.0 81100.0 66100.0
7 SubUnit22 150.0 180.0 30.0 11000.0 42000.0 31000.0
8 SubUnit23 11000.0 1110.0 -9890.0 1001000.0 1022010.0 21010.0
9 Total Unit2 12250.0 2420.0 -9830.0 1027000.0 1145110.0 118110.0
最佳答案
您可以使用 DataFrame.stack
reshape 然后删除不必要的行:
d ={('Domestic ', 'Jan', 2020): {'SubUnit11': 100.0, 'SubUnit12': 50.0, 'SubUnit13': 1000.0, 'Total Unit1': 1150.0, 'Unit2': np.nan, 'SubUnit21': 1100.0, 'SubUnit22': 150.0, 'SubUnit23': 11000.0, 'Total Unit2': 12250.0}, ('Domestic ', 'Feb', 2021): {'SubUnit11': 130.0, 'SubUnit12': 80.0, 'SubUnit13': 1100.0, 'Total Unit1': 1310.0, 'Unit2': np.nan, 'SubUnit21': 1130.0, 'SubUnit22': 180.0, 'SubUnit23': 1110.0, 'Total Unit2': 2420.0}, ('Domestic ', 'Diff', 'Unnamed: 3_level_2'):
{'SubUnit11': 30.0, 'SubUnit12': 30.0, 'SubUnit13': 100.0, 'Total Unit1': 160.0, 'Unit2': np.nan, 'SubUnit21': 30.0, 'SubUnit22': 30.0, 'SubUnit23': -9890.0, 'Total Unit2': -9830.0}, ('International', 'Jan', 2020): {'SubUnit11': 5000.0, 'SubUnit12': 1000.0, 'SubUnit13': 100000.0, 'Total Unit1': 106000.0, 'Unit2': np.nan, 'SubUnit21': 15000.0, 'SubUnit22': 11000.0, 'SubUnit23': 1001000.0, 'Total Unit2': 1027000.0},
('International', 'Feb', 2021): {'SubUnit11': 8000.0, 'SubUnit12': 4000.0, 'SubUnit13': 100010.0, 'Total Unit1': 112010.0, 'Unit2': np.nan, 'SubUnit21': 81100.0, 'SubUnit22': 42000.0, 'SubUnit23': 1022010.0, 'Total Unit2': 1145110.0}, ('International', 'Diff', 'Unnamed: 6_level_2'): {'SubUnit11': 3000.0, 'SubUnit12': 3000.0, 'SubUnit13': 10.0, 'Total Unit1': 6010.0, 'Unit2': np.nan, 'SubUnit21': 66100.0, 'SubUnit22': 31000.0, 'SubUnit23': 21010.0, 'Total Unit2': 118110.0}}
df = pd.DataFrame(d)
#added missing Unit1 in sample data
df.loc['Unit1'] = np.nan
df = df.loc[df.index[-1:].tolist() + df.index[:-1].tolist()]
# print (df)
#create new column Unit by index with repalce non matched Unit to NaNs
df['Unit'] = df.index.where(df.index.str.startswith('Unit'))
#forward flling NaNs
df['Unit'] = df['Unit'].ffill()
#add column to index and change order of levels in MultiIndex
df = df.set_index('Unit', append=True).swaplevel(1,0)
#reshape
df = df.stack([1, 2]).rename_axis(['Unit','SubUnit','Month','Year']).reset_index()
#remove unnecessary rows
df = df[df['Month'].ne('Diff') &
~df['Year'].str.startswith('Unnamed', na=False) &
~df['SubUnit'].str.startswith(('Total', 'Unit'), na=False)]
print (df)
Unit SubUnit Month Year Domestic International
2 Unit1 SubUnit11 Feb 2021 130.0 8000.0
3 Unit1 SubUnit11 Jan 2020 100.0 5000.0
6 Unit1 SubUnit12 Feb 2021 80.0 4000.0
7 Unit1 SubUnit12 Jan 2020 50.0 1000.0
10 Unit1 SubUnit13 Feb 2021 1100.0 100010.0
11 Unit1 SubUnit13 Jan 2020 1000.0 100000.0
18 Unit2 SubUnit21 Feb 2021 1130.0 81100.0
19 Unit2 SubUnit21 Jan 2020 1100.0 15000.0
22 Unit2 SubUnit22 Feb 2021 180.0 42000.0
23 Unit2 SubUnit22 Jan 2020 150.0 11000.0
26 Unit2 SubUnit23 Feb 2021 1110.0 1022010.0
27 Unit2 SubUnit23 Jan 2020 11000.0 1001000.0
最后是添加日期时间列进行排序:
df['Date'] = pd.to_datetime(df['Month'] + df['Year'].astype(str), format='%b%Y')
df = df.sort_values(['Unit','SubUnit','Date'], ignore_index=True)
print (df)
Unit SubUnit Month Year Domestic International Date
0 Unit1 SubUnit11 Jan 2020 100.0 5000.0 2020-01-01
1 Unit1 SubUnit11 Feb 2021 130.0 8000.0 2021-02-01
2 Unit1 SubUnit12 Jan 2020 50.0 1000.0 2020-01-01
3 Unit1 SubUnit12 Feb 2021 80.0 4000.0 2021-02-01
4 Unit1 SubUnit13 Jan 2020 1000.0 100000.0 2020-01-01
5 Unit1 SubUnit13 Feb 2021 1100.0 100010.0 2021-02-01
6 Unit2 SubUnit21 Jan 2020 1100.0 15000.0 2020-01-01
7 Unit2 SubUnit21 Feb 2021 1130.0 81100.0 2021-02-01
8 Unit2 SubUnit22 Jan 2020 150.0 11000.0 2020-01-01
9 Unit2 SubUnit22 Feb 2021 180.0 42000.0 2021-02-01
10 Unit2 SubUnit23 Jan 2020 11000.0 1001000.0 2020-01-01
11 Unit2 SubUnit23 Feb 2021 1110.0 1022010.0 2021-02-01
关于python - 如何使用 Pandas 或 Spark Dataframe 展平嵌套的 Excel 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66272366/
您好,我有一个使用 JSON.Stringify 输出到此的对象 {"0":["test1","ttttt","","","","","","","",""],"1":["test2","ghjgjh
我有以下数据框,它是执行 groupby + 聚合总和的结果: df.groupby(['id', 'category']).agg([pd.Series.sum])
我有一个 3D 三角形带(见插图)。三角形不在一个平面内。 我想展平三角形带,使所有三角形都位于第一个三角形的平面内。 计划是围绕与第一个三角形的连接边旋转第二个三角形,使其与第一个三角形在同一平面内
简单地说,我正在寻找可在 iOS 上使用的与 NSBezierPath 的 -bezierPathByFlatteningPath 等效的方法。这对我来说是直接处理 CGPath 的函数还是 UIBe
假设我有以下 JToken: @"{ ""data"": [ { ""company"": { ""ID"": ""12
如果我在多个分支中处理单个功能,我会使用 git pull branch1 branch2 branch3 将所有更改 pull 入我的主分支。但是,每个分支的所有提交日志也会被复制。如何将提交日志扁
这个问题在这里已经有了答案: How do I make a flat list out of a list of lists? (33 个答案) 关闭6年前。 假设我们有一个返回列表(或有限迭代器)
给定如下模式: root |-- first_name: string |-- last_name: string |-- degrees: array | |-- element: struc
我有一个包含多个列的表,其中一些列是相同长度的数组。我想解除它们的嵌套,以获得包含来自不同行中的数组的值的结果。 所以有这样一张 table : 我想去: 这是其中一个数组列的工作方式: WITH d
我最近买了一台 RICOH THETA S,用于在 360 vr 中录制足球比赛。 我想使用 ffmpeg 将我用我的相机录制的鱼眼电影展平,这可能吗? enter image description
这是我的 question 的后续.是否可以将表格展平为如下所示,而不是数据透视表: data = {'year': ['2016', '2016', '2015', '2014', '2013'],
我目前正在将我的 jruby/java2d 图形绘制/布局应用程序移植到 macruby/cocoa。因此我需要获取开放的 NSBezierPath 与封闭的 NSBezierPath 的交点。 在
是否有一种简单的方法来展平一组 try 以给出尝试值的成功或失败? 例如: def map(l:List[Int]) = l map { case 4 => Failure(new Excepti
我有一个包含数百万行的“服务”表。每行对应于工作人员在给定日期和时间间隔内提供的服务(每行都有一个唯一的 ID)。在某些情况下,工作人员可能会在重叠的时间范围内提供服务。我需要编写一个查询来合并重叠的
我在使用Elastic Search(ES)检索JSON对象时遇到问题。现在,当我尝试使用下面的请求正文从ES查询一些数据时, "_source": [ "data.id", "dat
我有一个订单流(来源是订单列表)。每个订单都有一个 Customer 和一个 OrderLine 列表。 我想要实现的是拥有一个以客户为键的 map ,以及属于该客户的所有订单行,在一个简单的列表中作
给定一个如下所示的复杂对象: case class Complex ( id: Long, name: String, nested: Seq[Complex] ) 实际上,这可能会变成这
我很好奇你如何将数组 Promise 映射的结果展平。我有一个函数 Promise.maps 一组值,它们本身就是 promise (需要解析)并返回一个数组。所以,我得到类似的结果: [ [1, 2
我是 CouchDB 的新手,我只是想评估它在常见任务中的实用性。其中一项任务是生成报告。我的问题是:如果我有这样的文档结构: { "_id": "29763f342ab34fd7b579fd4
假设我们有这样的 map : %{"a": %{"b": 2, "c":5}, "d": 1} 有没有类似this function的东西(js回答同一问题)内置elixr? 最终结果应该是: %{"
我是一名优秀的程序员,十分优秀!