python - 计算Python pandas中的系列数

标签 python pandas numpy dataframe time-series

我想计算给定数据中存在的系列数。

我需要此信息来进行时间序列计数。

Here is the data

在这里我希望用户选择如何检查系列。

例如系列可以是地区 > 产品 > 国家/地区(请也选择此代码)

现在,系列是:

  1. 亚洲 > A > 印度
  2. 亚洲 > A > 泰国
  3. 亚洲 > B > 印度
  4. 亚洲 > B > 泰国
  5. 亚洲 > D > 日本
  6. 欧洲 > A > 意大利
  7. 欧洲 > A > 土耳其
  8. 欧洲 > B > 意大利

所以我需要一个答案为“8”,因为所选层次结构有 8 个系列。

通过将 CSV 转换为 Excel,然后对所有系列进行计数,我成功地做到了这一点。但如果我的数据量很大,那就非常耗时。

import pandas as pd
import numpy as np

df = pd.read_csv("data.csv")
state = df.unstack('Sales')
set1= list(set(state))

pivot = pd.pivot_table(df,index=["Region","Country","Product"],values="Sales",aggfunc=np.sum)
df1 = pd.DataFrame(pivot)
df1.to_excel("output.xlsx")

df2 = pd.read_excel("output.xlsx")

cols = list(df2.columns)
count_TS = 0
for i in cols:
    if i =="":
        continue
    count_TS += df2[i].count()


print("Total Timeseries = ",count_TS + 1 -(df2['Sales'].count()))

注意:上述代码中使用的层次结构是地区>国家/地区>产品

是否可以在不创建新的 Excel 文件的情况下执行此操作?

这是适合您的 numpy 数组:

array([['Asia', 'India', 'A', 200],
       ['Asia', 'Thailand', 'A', 150],
       ['Asia', 'India', 'B', 175],
       ['Asia', 'Thailand', 'B', 225],
       ['Asia', 'Japan', 'D', 325],
       ['Europe', 'Italy', 'A', 120],
       ['Europe', 'Turkey', 'A', 130],
       ['Europe', 'Italy', 'B', 160]], dtype=object)

最佳答案

IIUC,您想要GroupBy.ngroups:

df.groupby(['Region','Country','Sales']).ngroups
#8 Output

关于python - 计算Python pandas中的系列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58896556/

相关文章:

python - 在 NumPy 1.14 中将结构化数组的切片转换为常规 NumPy 数组

python - 逆 FFT 在不应返回负值时返回负值

python - 计算 numpy 数组中列的出现次数

python - 从 Python 中编译的正则表达式中提取命名组正则表达式模式

python - Selenium WebDriver 可以单击下拉菜单中的所有组合吗

python - Django CMS 面包屑导航

python - 展平 Pandas Dataframes 中的列并引用原始资料

python - 如何根据某列的值获取所有行的前3个值和后3个值?

python - 动态删除单词的一部分

python - 从 np.fft 计算振幅