【问题标题】:How Can I Segregate data in pandas From my Timestamp Column如何从我的时间戳列中分离 pandas 中的数据
【发布时间】:2021-06-23 15:24:10
【问题描述】:

我正在使用带有 pandas 的 Excel 工作表,我正在分析其中的一些数据。

在 excel 表中,我有 8 列,一列是时间戳,另一列是城市列,诸如域、州等。

我只想分析城市和时间戳列。

我已从数据框中的 excel 表中选择了城市和时间戳列。我找到了城市计数,这意味着有多少行包含使用 cities_df['Count'] = df['City_Town_Village '].value_counts() 的同一个城市

在找到城市计数后,我找出了使用cities_df['PctCnt'] =(cities_df['Count']/sum(cities_df['Count'])*100).apply("{0:.2f}".format)的所有城市的百分比

现在我的问题是,当我找到 city_count 时,我的数据框中的行正在减少,这意味着我的 df 有 238 行,但是在计数之后它们减少到 128 到现在完全没有问题。他们正在减少只是因为计数。

我的 df 中也有时间戳列,假设城市 德里 有些人在 2021 年 5 月 28 日注册,有些人在 2021 年 5 月 29 日注册。但是在找出 city_count 之后,我的 df 只显示了开始日期的时间戳,即 5 月 28 日..

我不知道为什么会发生这种情况,实际上我想将数据分成两周,并希望按周绘制图表。以及城市百分比。

这是我的Excel file

这是我正在使用的代码:

import pandas as pd
df = pd.read_excel('PCS_NWR_Sheet.xlsx')
df.head()
pd.set_option('display.max_rows', 300)
cities_df = pd.DataFrame()
cities_df['Count'] = df['City_Town_Village '].value_counts()
cities_df.index.names=['City']
cities_df.reset_index(inplace = True)
cities_df['Timestamp'] = df['Timestamp']
column_names = ['Timestamp', 'City', 'Count']
cities_df = cities_df.reindex(columns=column_names)
cities_df['PctCnt'] =(cities_df['Count']/sum(cities_df['Count'])*100).apply("{0:.2f}".format)
Metro_list = ['Hyderabad', 'Kolkata', 'Delhi', 'Pune', 'Bengaluru', 'Noida', 'Kanpur', 'Gurgaon']
top_metro=cities_df[cities_df['City'].isin(Metro_list)]
top_metro

【问题讨论】:

    标签: python pandas dataframe data-analysis


    【解决方案1】:

    .value_counts() 将返回一个系列,其中大小等于您计算的唯一元素的数量。所以你得到的行数更少,因为它正在对这些东西进行分组。

    我可以想出两种方法来解决这个问题(如果我理解正确的话)。

    1. 在日期列和城市列上都输入.value_counts()
    df[['City_Town_Village','Date']].value_counts()
    

    如果您当前没有将时间戳作为日期,则需要创建一个日期列来执行此操作(您可能无法按日期时间分组,因为时间会有所不同。这将给出一个系列其中行数等于两列的每个现有组合的大小。

    1. 使用 town 列的 value_count 创建一个单独的数据框,然后合并它们。也就是说,如果您希望主数据框中的一列具有城镇在数据中出现的次数,则该列的大小不同(如我们所说),因此您可以将其存储在其他地方,但可以根据需要将其带回。
    df2 = pd.DataFrame(df['City_Town_Village'].value_counts())
    df2.reset_index(inplace=True) # by fault, making the df from value_counts() will make your city/town the index, this makes a normal index)
    df2.columns = ['City_Town_Village','Count'] #rename the columns
    df = df.merge(df2,how='left',on='City_Town_Village')
    

    这将使df 添加Counts 列,它将是原始数据集中城市/城镇的计数。

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 2018-07-09
      • 2022-12-10
      • 1970-01-01
      相关资源
      最近更新 更多