【问题标题】:Create function to extract data from dataframe based on value创建函数以根据值从数据框中提取数据
【发布时间】:2020-07-29 13:52:03
【问题描述】:

我有一个包含电子竞技游戏数据的数据框:

index   result   map_index   map_games_total   map_win_rate   
0       win      1           3                 0.66           
1       win      3           2                 0.5            
2       loss     3           2                 0.5            
3       loss     2           1                 0.0           
4       win      1           3                 0.66           
5       loss     1           3                 0.66          
6       win      4           1                 1.0            

我想定义一个函数来自动识别三个最常玩的地图 (map = map_index) 并创建一个新的数据框,其中只包含每个已识别地图的这些地图的行。所以对于上面的例子,这将是这样的:

subdf_1

index   result   map_index   map_games_total   map_win_rate   
    0       win      1           3                 0.66           
    4       win      1           3                 0.66           
    5       loss     1           3                 0.66           

subdf_2

 index   result   map_index   map_games_total   map_win_rate   
    1       win      3           2                 0.5            
    2       loss     3           2                 0.5            

subdf_3

 index   result   map_index   map_games_total   map_win_rate   
    3       loss     2           1                 0.0            

subdf_4

 index   result   map_index   map_games_total   map_win_rate   
    6       win      4           1                 1.0            

谢谢。

【问题讨论】:

  • 我不确定我是否遵循。 (a) 什么是“播放次数最多”? (b) 您提到了三个最常玩的游戏,但结果中有四个子数据框。
  • 对于大多数玩家来说,我指的是“map_games_total”列中的值(该地图在 df 中出现的总和)。在我的示例中,有四个子数据帧,因为有两个地图“播放次数第三多”。我希望能澄清我的意思

标签: python function dataframe data-extraction


【解决方案1】:

试试这个,

results = {}

for i, j in enumerate(df.map_win_rate.unique()):
    results[f'subdf_{i}'] = df[df.map_win_rate.eq(j)]

print(results['subdf_1'])

   index result  map_index  map_games_total  map_win_rate
1      1    win          3                2           0.5
2      2   loss          3                2           0.5

print(results['subdf_2'])

   index result  map_index  map_games_total  map_win_rate
3      3   loss          2                1           0.0

...

【讨论】:

  • 你的方式比我的帖子好,但我认为你需要通过 map_inex 更改 map_win_rate,而且就像我的答案一样,在你的结果不被 map_games_total 存储之前。
【解决方案2】:

你可以试试这个:

def subdf(df,column):
    list_sub_df=[]
    for value in df.column.unique():
        list_sub_df.append(df[df[column]==value])
    return(list_sub_df)

也许您之前必须按值排序

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 2022-01-12
    • 2021-07-23
    • 2021-11-11
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多