我有一个非常长的数据帧,其中包含很多数据,需要清除这些数据才能继续进行数据可视化。我有几件事需要做,我可以在一定程度上做到每件事,但是我不知道如何或者甚至不可能一起做。
这就是我要做的:
period arv_count Mode of arrival
0 2013-01 984350 Air
1 2013-01 129074 Sea
2 2013-01 178294 Land
3 2013-02 916372 Air
4 2013-02 125634 Sea
5 2013-02 179359 Land
6 2013-03 1026312 Air
7 2013-03 143194 Sea
8 2013-03 199385 Land
... ... ... ...
78 2015-03 940077 Air
79 2015-03 133632 Sea
80 2015-03 127939 Land
81 2015-04 939370 Air
82 2015-04 118120 Sea
83 2015-04 151134 Land
84 2015-05 945080 Air
85 2015-05 123136 Sea
86 2015-05 154620 Land
87 2015-06 930642 Air
88 2015-06 115631 Sea
89 2015-06 138474 Land
这是数据外观的一个示例。我不知道是否有必要,但是我仅在一年中创建了另一列,如下所示:
def year_extract(year):
return year.split('-')[0].strip()
df1 = pd.DataFrame(df['period'])
df1 = df1.rename(columns={'period':'Year'})
df1 = df1['Year'].apply(year_extract)
df1 = pd.DataFrame(df1)
df = pd.merge(df, df1, left_index= True, right_index= True)
我知道如何使用groupby,也知道如何找到最大值,但是我不知道是否可以在组中找到最大值,例如在2013、2014、2015等中找到最高到达计数
以上数据是基于运输方式和期间的所有国家的总到达计数,但是原始数据还包含另外的数百行,其中指出了该地区和国家,但我删除了,因为我不知道如何使用或清洁它们。看起来像这样:
period region country moa arv_count
2013-01 Total Total Air 984350
2013-01 Total Total Sea 129074
2013-01 Total Total Land 178294
2013-02 Total Total Air 916372
... ... ... ... ...
2015-12 AMERICAS USA Land 2698
2015-12 AMERICAS Canada Land 924
2013-01 ASIA China Air 136643
2013-01 ASIA India Air 55369
2013-01 ASIA Japan Air 51178
如果可能的话,我也想利用区域数据。希望创建一个聚集的柱状图,以7个区域为x轴,到达计数为y轴,每个区域显示通过陆,海和空到达的计数,但是我觉得有太多我不知道的多余数据现在该如何处理。
例如,我不知道如何处理时期和国家,因为我所需要的只是基于地区和年份的陆地,海洋和空中到达的总数,而与国家和月份无关。
答案 0 :(得分:1)
我使用此数据框来测试代码(您问题中的那个):
df = pd.DataFrame([['2013-01', 'Total', 'Total', 'Air', 984350],
['2013-01', 'Total', 'Total', 'Sea', 129074],
['2013-01', 'Total', 'Total', 'Land', 178294],
['2013-02', 'Total', 'Total', 'Air', 916372],
['2015-12', 'AMERICAS', 'USA', 'Land', 2698],
['2015-12', 'AMERICAS', 'Canada', 'Land', 924],
['2013-01', 'ASIA', 'China', 'Air', 136643],
['2013-01', 'ASIA', 'India', 'Air', 55369],
['2013-01', 'ASIA', 'Japan', 'Air', 51178]],
columns = ['period', 'region', 'country', 'moa', 'arv_count'])
这里是获取按年,地区和类型(海,陆,空)划分的到达总数的代码:
首先添加“年份”列:
df['year'] = pd.to_datetime(df['period']).dt.year
然后按(年,地区,moa)分组,然后在每组中添加arv_count:
df.groupby(['region', 'year', 'moa']).arv_count.sum()
以下是输出:
region year moa
AMERICAS 2015 Land 3622
ASIA 2013 Air 243190
Total 2013 Air 1900722
Land 178294
Sea 129074
我希望这就是您想要的!