我有两个数据帧,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'中包含的所有值,而不是仅使用当前行中的年份值。我知道我可能过于复杂,但我不知道如何解决这个问题。任何帮助将非常感激。谢谢!
答案 0 :(得分:1)
我认为您需要stack
首先Series
重塑MultiIndex
year
,然后join
重新colour
和s = 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 {