Python列表到索引数据框

Posted

技术标签:

【中文标题】Python列表到索引数据框【英文标题】:Python List to Indexed Dataframe 【发布时间】:2019-02-04 05:08:03 【问题描述】:

我有一个已编入索引并打印出来的列表;此处显示的示例:

[Home Team                     season   
 1. FC Kaiserslautern          2010/2011     48
                               2011/2012     24
 1. FC Köln                    2008/2009     35
                               2009/2010     33
                               2010/2011     47
                               2011/2012     39
                               2014/2015     34
                               2015/2016     38
 1. FC Nürnberg                2009/2010     32
                               2010/2011     47
                               2011/2012     38
                               2012/2013     39
                               2013/2014     37

不过,我无法将其转换为相同格式的 pandas 数据框。使用df = pd.DataFrame(df) 创建一个包含所有内容的单行数据框。

我获取列表的代码是:

df = []
home_goals = leaguesFinal.groupby(('Home Team', 'season'))['home_team_goal'].sum()
away_goals = leaguesFinal.groupby(('Away Team', 'season'))['away_team_goal'].sum()
df.append((home_goals + away_goals))

我只是想总结每支球队每个赛季的主客场进球数。如果有更好的方法来做到这一点,我会全力以赴。最后我想要一个数据框,以便于操作。

【问题讨论】:

对不起,我在I'm unable to convert this to a pandas dataframe in the same format though.丢了你和什么格式一样? 我迷失了你的列表示例,它看起来根本不像列表。 @jpp 格式相同,第 0 列应该是团队名称,第 1 列是年份,第 2 列是目标。我提到它使用单行创建数据框,所有信息都在同一行中,也就是与图片中的格式不同 @Goyo 抱歉,它看起来不像一个列表。虽然是df = [] 【参考方案1】:

我相信需要 rename_axisaddDataFrame 相同名称的 MultiIndex 使用 reset_index

leaguesFinal = pd.DataFrame(
    'Home Team': ['b','a','a','c','b','a'],
    'Away Team': ['a','b','c','a','a','b'],
    'season': ['2010/2011'] * 3 + ['2012/2013'] * 3,
    'home_team_goal': [1,2,3,4,3,2],
    'away_team_goal': [4,6,7,8,2,1]
)
print (leaguesFinal)
  Home Team Away Team     season  home_team_goal  away_team_goal
0         b         a  2010/2011               1               4
1         a         b  2010/2011               2               6
2         a         c  2010/2011               3               7
3         c         a  2012/2013               4               8
4         b         a  2012/2013               3               2
5         a         b  2012/2013               2               1

home_goals = leaguesFinal.groupby(['Home Team', 'season'])['home_team_goal'].sum()
away_goals = leaguesFinal.groupby(['Away Team', 'season'])['away_team_goal'].sum()

print (home_goals)
Home Team  season   
a          2010/2011    5
           2012/2013    2
b          2010/2011    1
           2012/2013    3
c          2012/2013    4
Name: home_team_goal, dtype: int64

print (away_goals)
Away Team  season   
a          2010/2011     4
           2012/2013    10
b          2010/2011     6
           2012/2013     1
c          2010/2011     7
Name: away_team_goal, dtype: int64

a = home_goals.rename_axis(['Team','season'])
b = away_goals.rename_axis(['Team','season'])
df = (a.add(b, fill_value=0)).reset_index(name='both')
print (df)
  Team     season  both
0    a  2010/2011   9.0
1    a  2012/2013  12.0
2    b  2010/2011   7.0
3    b  2012/2013   4.0
4    c  2010/2011   7.0
5    c  2012/2013   4.0

【讨论】:

以上是关于Python列表到索引数据框的主要内容,如果未能解决你的问题,请参考以下文章

在Python中查找与数据框元素列表相对应的索引列表

Python:从每个新行从特定列表索引开始的列表创建数据框

将多索引数据帧的索引值提取为python中的简单列表

带有列名列表的 Python Pandas 索引数据框

以最快的方式从数据框 Python 中的索引创建一个新的字典列表

从满足数据框 Python 条件的列表中索引并保存最后 N 个点