遍历列以切片数据集

Posted

技术标签:

【中文标题】遍历列以切片数据集【英文标题】:Iterate over columns to slice dataset 【发布时间】:2018-12-14 13:57:02 【问题描述】:

我有以下数据集: 名为:2,3,4...9 的列填充了彼此重叠的主题名称。浏览量是一个结果变量。

        2                           3                       Pageviews
0       Financial Services          Consumer Products       4106.0
1       Consumer Products           ...                     3368.0
2       Consumer Products           ...                     1025.0
3       Collaboration               ...                     7840.0
4       Future of Supply Chains     ...                     2076.0

我想将每个主题列 (2,3, 4, ...) 与 Pageviews 一起切片并附加它们,以便仅创建一个具有 1 个主题列和 Pageviews 的数据框。

我习惯于在 Stata 中循环,您可以使用 x 循环遍历列的名称,但我知道这与 Pyhton 完全不同。

我从

开始
for x in range(2, 9):
    df_x = df[['Pageviews',  df.x]]

但 Python 无法识别 df.x

如何循环遍历列名?是否可以使用迭代器来创建新的数据框?

谢谢!

编辑

我想要的输出是

                                       Col        Pageviews
0                           Financial Services      4106.0
1                            Consumer Products      3368.0
2                            Consumer Products      1025.0
3                                 Collaboration     7840.0
4                      Future of Supply Chains      2076.0
5                          Future of Reporting      2123.0
6                    Sustainability Management     15576.0
7                                 Human Rights        52.0
8                                      BSR News      903.0
9                       Energy and Extractives      1232.0
10                                  HERproject       616.0
11                   Sustainability Management     10697.0

其中 col 是附加第 2、3、4 列的结果...而 Pageviews 是附加相应的 Pageviews 列的结果..

【问题讨论】:

您能否展示您期望输出 DataFrame 的样子? 【参考方案1】:

使用melt

df.melt('Pageviews').drop('variable',1)
Out[644]: 
    Pageviews                 value
0        1210      ConsumerProducts
1        1528         Collaboration
2        1716     FinancialServices
3        1403         Collaboration
4        1090      ConsumerProducts
5        1210      ConsumerProducts
6        1528  FutureofSupplyChains
7        1716      ConsumerProducts
8        1403     FinancialServices
9        1090  FutureofSupplyChains
10       1210     FinancialServices
11       1528     FinancialServices
12       1716         Collaboration
13       1403  FutureofSupplyChains
14       1090     FinancialServices

【讨论】:

【参考方案2】:

我认为您正在寻找某种stack 方法而不是迭代(通常,在使用数据帧时,迭代是最后的手段,因为通常有矢量化方法来实现大多数数据重组任务)。

以示例数据框为例:

>>> df
                    0                        1                        2  \
0   Consumer Products        Consumer Products       Financial Services   
1       Collaboration  Future of Supply Chains       Financial Services   
2  Financial Services        Consumer Products            Collaboration   
3       Collaboration       Financial Services  Future of Supply Chains   
4   Consumer Products  Future of Supply Chains       Financial Services   

   Pageviews  
0       1210  
1       1528  
2       1716  
3       1403  
4       1090  

您可以执行以下操作:

new_df = (df.set_index('Pageviews')
          .stack()
          .reset_index(0))

>>> new_df
    Pageviews                        0
0        1210        Consumer Products
1        1210        Consumer Products
2        1210       Financial Services
3        1528            Collaboration
4        1528  Future of Supply Chains
5        1528       Financial Services
6        1716       Financial Services
7        1716        Consumer Products
8        1716            Collaboration
9        1403            Collaboration
10       1403       Financial Services
11       1403  Future of Supply Chains
12       1090        Consumer Products
13       1090  Future of Supply Chains
14       1090       Financial Services

【讨论】:

嗯,既然我读到了你的回答,我不确定 OP 实际上在问什么.. 我同意这有点不清楚......这是我的解释

以上是关于遍历列以切片数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TensorFlow 中对数据集进行切片?

语义分割中的数据集拆分

为啥读取整个 hdf5 数据集比读取切片更快

如何更改 Pytorch 数据集的大小?

C#,遍历数据集并显示数据集列中的每条记录

POWER BI 支持一个报表连接多数据集