如何从数据框中为字典维护相同的索引

问题描述

当我尝试运行此代码时:

SELECT
  calendar.date,type.label,COUNT(fact.id)
FROM
  calendar
CROSS JOIN
  type
LEFT JOIN
  submissions AS fact
    ON  fact.created >= calendar.date
    AND fact.created <  calendar.date + 1
    AND fact.type     = type.label
    AND fact.offer    = 'template1'
WHERE
    calendar.date BETWEEN ? AND ?
    AND type.label IN ('Mail','Online')
GROUP BY
  calendar.date,type.label

我正在为 X_test = df.values df_new = ks.DataFrame(X_test,columns = ['Sales','T_Year','T_Month','T_Week','T_Day','T_Hour']) 数据框获取新索引,该索引与 df_new 不同。

我尝试更改下面的代码以保留字典的索引。但是它给出了一个错误

df

'numpy.ndarray' 对象不可调用

有没有办法维护 X_test = df.values(index=df.index) 的索引,这些索引与 df_new 数据帧相同?

enter image description here

解决方法

DataFrames 有一个 set_index() 方法来手动设置“索引列”。考拉特别接受作为主要论点:

键:标签或类似数组或标签/数组列表
此参数可以是单个列键、与调用 DataFrame 长度相同的单个数组,也可以是包含列键和数组的任意组合的列表。这里,“数组”包括系列、索引和 np.ndarray。

这样,您就可以传递原始 df 的 Index 对象:

X_test = df.values 
df_new = ks.DataFrame(X_test,columns = ['Sales','T_Year','T_Month','T_Week','T_Day','T_Hour'])  

df_new = df_new.set_index(df.index)

现在关于您收到错误的行:

X_test = df.values(index=df.index)

出现错误的原因是您将 numpy 数组与 pandas DataFrames 混淆。
当您调用 DataFrame df.valuesdf 时,这将返回一个 np.ndarray 对象,其中包含所有数据帧值不带索引。 这不是函数,因此您不能通过编写 (index=df.index) 来“调用”它。
Numpy 数组没有自定义索引,它们只是数组。您的 df_new 只关心这一点,您可以按照我上面的说明进行设置。


免责声明:我无法为此答案安装 koalas,因此仅在 Pandas Dataframes 中进行了测试。如果考拉确实完全支持熊猫的界面,那应该可以。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...