尝试使用另一个结构不同的数据框中的值填充数据框中的列

时间:2017-12-01 12:55:06

标签: python pandas dataframe

我有两个数据帧,orig_df和another_df。

orig_df:

year    colour      result

2004    red         NaN
2004    yellow      NaN
2005    yellow      NaN
2005    green       NaN

another_df:

            red     yellow  green   blue

2004        1.2     2.5     1.6     1.9
2005        1.8     NaN     1.7     2.0
2006        NaN     2.2     1.9     1.5
2007        1.0     NaN     NaN     0.8

我要做的是使用orig_df中的值填充another_df中的结果列。具体来说,在具有2005年和绿色的orig_df行中,我想放置another_df的相应值,其中行具有2005年且列为绿色(在本例中为值1.7) 我能解决此问题的唯一方法是使用another_df访问loc[index, column]中的单个值并将orig_df中的值传递给它,但它不会像我一样工作期待它。

例如,做这样的事情就可以了:

orig_df['result'] = orig_df.year

最终结果如下:

year    colour      result

2004    red         2004
2004    yellow      2004
2005    yellow      2005
2005    green       2005

这也有效:

orig_df['result'] = orig_df.colour

在这两种情况下,它将从同一行获取正确的值并填充所有内容而不会出现任何问题。

但是当我尝试这样做时:

orig_df['result'] = another_df.loc[orig_df.year, orig_df.colour]
所有的地狱都破裂了。 我相信正在发生的事情是,orig_df.year现在只保存orig_df列' year'中包含的所有值,而不是仅使用当前行中的年份值。我知道我可能过于复杂,但我不知道如何解决这个问题。任何帮助将非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您需要stack首先Series重塑MultiIndex year,然后join重新colours = another_df.stack().rename('result') print (s) 2004 red 1.2 yellow 2.5 green 1.6 blue 1.9 2005 red 1.8 green 1.7 blue 2.0 2006 yellow 2.2 green 1.9 blue 1.5 2007 red 1.0 blue 0.8 Name: result, dtype: float64 #if thre is column result first remove it df = orig_df.drop('result', axis=1).join(s, on=['year','colour']) print (df) year colour result 0 2004 red 1.2 1 2004 yellow 2.5 2 2005 yellow NaN 3 2005 green 1.7

@WebMvcTest(controllers = SomeController.class, secure = false)
public class SomeControllerTest {