python - 如何从交替的布尔行创建一个新的 Pandas DataFrame,以便新的 DataFrame 可以绘制?
问题描述
我希望有人可以帮助我找出安排我的 DataFrame 做散点图的最佳方法。散点图应在 x 轴上显示年份,在 y 轴上显示外国玩家百分比。DataFrame 有大约 400 行,为方便起见,我将显示一个值较少的头部。
我从一个更大的 DataFrame 开始使用这个 DataFrame:
df1 = df.head(5).loc[:, ['Year', 'Nationality', 'Foreign Player']]
Year Nationality Foreign Player
0 2016 United States False
1 2016 United States False
2 2016 United States False
3 2016 United States False
4 2016 United States False
我按年做了一个 groupby,外国玩家把它做成了一个多索引 DataFrame:
df2 = df.groupby(['Year','Foreign Player']).count()[['Player']].head(6)
Player
Year Foreign Player
2000 False 26
True 2
2001 False 21
True 5
2002 False 20
True 5
我重置索引以制作单个索引 DataFrame:
df3 = df2.reset_index(level = [0,1]).head(6)
Year Foreign Player Player
0 2000 False 26
1 2000 True 2
2 2001 False 21
3 2001 True 5
4 2002 False 20
如您所见,True 和 False 与不同列中的相应值交替出现。我想做类似的事情:
df3['Percent Foreign'] = df3[['Foreign Player']= False] / (df3[['Foreign Player']= False ] + df3[['Foreign Player']= True)
显然那是行不通的。我的目标是一个新的 DataFrame:
Year Percent Foreign
0 2000 15
1 2001 12
2 2002 5
3 2003 22
4 2004 17
比如我可以使用 Matplotlib 绘制 x = Year 和 x = Percent Foreign。无论如何,如果有一种更简单的方法可以在更早的步骤中绘制它,那就更好了。
再次感谢!
解决方案
对于选择False
值用于反转掩码~
,将 的值转换Year
为索引并除以聚合sum
:
print (df3)
Year Foreign Player Player
0 2000 False 26
1 2000 True 2
2 2001 False 21
3 2001 True 5
4 2002 False 20
4 2002 True 10
df4 = (df3[~df3['Foreign Player']].set_index('Year')['Player'] /
df3.groupby('Year')['Player'].sum()).mul(100).reset_index(name='Percent Foreign')
print (df4)
Year Percent Foreign
0 2000 92.857143
1 2001 80.769231
2 2002 66.666667
另一个想法是df2
改变Series.unstack
:
df22 = df.groupby(['Year','Foreign Player'])['Player'].count().unstack()
print (df22)
Foreign Player False True
Year
2000 26 2
2001 21 5
2002 20 10
然后将False
列除以两列之和:
df4 = (df22[False] / df22.sum(axis=1)).mul(100).reset_index(name='Percent Foreign')
print (df4)
Year Percent Foreign
0 2000 92.857143
1 2001 80.769231
2 2002 66.666667
对于True
s 的百分比:
df5 = (df22[True] / df22.sum(axis=1)).reset_index(name='Percent Foreign')
推荐阅读
- python - PyQt在滚动区域自动调整小部件的大小
- ios - 在 calabash-ios 控制台中使用时的触摸/点击方法问题
- python-3.x - 使用 matplotlib 制作雷达图时出现运行时错误
- laravel - 使用 mailchimp 发送事务邮件
- javascript - 将复选框值传递给 laravel 控制器
- c++ - 查找输入数字的最小值/最大值的 C++ 程序
- android - 如何在运行时将可下载字体应用于整个应用程序?
- vb.net - 无法将 ListView 转换为 ListViewItem
- php - 在php中使用angular js时出错
- c# - 允许重复键(或值)并允许我删除项目的 C# 排序集合