我正在尝试使用 Pandas 库在 Python 中重新创建我在 Excel 中制作的数据透视表。我试图用时间段作为过滤器来汇总超过 500K 行的 OD 总行程数据。在 Excel 上,我只会执行行(O)、列(D)、值(行程)、过滤器(时间)。到目前为止,在Python上,我只有索引、列、值、aggfunc,但我不知道如何过滤。有 12 个时间段,我只想包括 3 个。
我尝试使用 O/D 作为索引,然后使用时间作为列。有没有办法从数据透视表中删除列?
这是我制作完整数据透视表(包括所有时间)的内容:
import pandas as pd
df = pd.read_excel('...xlsx')
print(df.pivot_table(index=['O', "D"], columns=['Time'], values=['Trips'], aggfunc='sum'))
我也尝试过:
print(df[(df.Time == '7am')].pivot_table(index=['O', "D"], columns=['Time'], values='Trips', aggfunc='sum'))
这对我有用,但我试图包括 3 个不同的时间,所以我尝试了
print(df[(df['Time'] == '7am') & (df['Time'] == '4pm') & (df['Time'] == 'All Day')].pivot_table(index=['O', "D"], columns=['Time'], values='Trips', aggfunc='sum'))
但这没有用。
我对 Python 很陌生,不可否认,了解不多。因此,如果我需要更加了解 Python 的某些方面才能解决这个问题(或者它是否非常基础),请告诉我。或者任何可以为我指明正确方向的资源。
在上面的代码中:
print(df[(df['时间'] == '上午 7 点') & (df['时间'] == '下午 4 点') & (df['时间'] == '全天')].pivot_table (index=['O', "D"], columns=['Time'], value='Trips', aggfunc='sum'))
您正在对 Pandas 说同时搜索三个值。在您的示例中,您正在搜索包含“上午 7 点”、“下午 4 点”和“全天”的行。您并不是对他说要在不同行的列中搜索这些不同的值。
您可以使用 isin() 方法并将过滤器放在变量中。
喜欢:
filtered_df = df[df['时间'].isin(['上午 7 点','下午 4 点','全天'])]
pivot_table=filtered_df.pivot_table(index=['O','D'],columns=['Time'],values='Trips',aggfunc='sum')
我认为它会起作用。我希望如此