使用列表/字典中的值在数据框中创建新行

时间:2018-06-04 15:44:25

标签: python pandas dataframe

我正在使用几个数据框,我将结合整数值来推断最终得分。有点像最终成绩'计算,也许是一个'测试'称重和' HW'称重,拍照。

无论如何,我想使用索引值列表,并遍历每个数据帧以查看它们是否存在于每个数据帧中。如果数据框没有条目'对于此数据框中的索引或字符,我想为数据框中的字符添加一行,然后为每个月的条目分配一个常量值。我正在查找的数据框按列和行按字符分列。

我考虑过使用列表或字典。这是我想要使用的列表,只是为了向您展示每个角色:

my_list = 
['Sonic','Knuckles','Shadow','Tails','Amy']

以下是我想将其添加到其中一个数据框的示例。

penalties_df = 
                       Jan 18  Feb 18  Mar 18  Apr 18
Character                                     
Sonic                  1.0     2.0     3.0    1.0
Knuckles               2.0     2.0     2.0    2.0
Amy                    1.0     2.0     1.0    1.0

我还没有收到ShadowTails的任何内容,这就是为什么他们没有排。

Shadow                 xxx     xxx     xxx    xxx
Tails                  xxx     xxx     xxx    xxx

我想要的输出:

penalties_df = 
                           Jan 18  Feb 18  Mar 18  Apr 18
    Character                                     
    Sonic                  1.0     2.0     3.0    1.0
    Knuckles               2.0     2.0     2.0    2.0
    Shadow                 0.0     0.0     0.0    0.0
    Tails                  0.0     0.0     0.0    0.0
    Amy                    1.0     2.0     1.0    1.0

&{39; xxx只是占位符,用于指示我尚未从该角色(ShadowTails)收到任何数据。我定期运行我的代码,有时我运行代码直到我收到一个字符的数据,我想通过检查数据框中是否存在该字符来创建一个行并赋值为0。

我考虑了.append(),但我没有现有的数据框可以附加到penalties_df。我只想创建新行。

我可以为此方案创建要访问的字典吗?我认为我的字典会是这样的,但是,输入一堆重复的0会是多余的(我只会在这里用一段时间来保持我的问题简短):< / p>

penalties_none = {
        "Sonic" : 0,
        "Knuckles" : 0,
        "Shadow" : 0,
        "Tails" : 0,
        "Amy" : 0,
    }

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要在df.indexmy_list之间区分名称。然后你需要用这些差异制作一个df并附加到你的主df。

df.append(pd.DataFrame(index=list(set(my_list) - set(df.index)))).fillna(0)

输出:

res = df.append(pd.DataFrame(index=list(set(my_list) - set(df.index)))).fillna(0)
res.index.name='Character'

输出:

             Apr_18  Feb_18  Jan_18  Mar_18
Character                                
Sonic         1.0     2.0     1.0     3.0
Knuckles      2.0     2.0     2.0     2.0
Amy           1.0     2.0     1.0     1.0
Tails         0.0     0.0     0.0     0.0
Shadow        0.0     0.0     0.0     0.0

答案 1 :(得分:1)

我认为您需要reindex功能:

my_list = ['Sonic','Knuckles','Shadow','Tails','Amy']

penalties_df = penalties_df.reindex(mylist, fill_value = 0)