Python 将df1追加到df2的熊猫在结果中获得0s/nan
我有两个数据帧。df1包含一系列值Python 将df1追加到df2的熊猫在结果中获得0s/nan,python,pandas,Python,Pandas,我有两个数据帧。df1包含一系列值 df1 = pd.DataFrame({'winnings': cumsums_winnings_s, 'returns':cumsums_returns_s, 'spent': cumsums_spent_s, 'runs': cumsums_runs_s, 'wins': cumsums_wins_s, 'expected': cumsums_expected_s}, columns=["winnings", "returns", "runs", "win
df1 = pd.DataFrame({'winnings': cumsums_winnings_s, 'returns':cumsums_returns_s, 'spent': cumsums_spent_s, 'runs': cumsums_runs_s, 'wins': cumsums_wins_s, 'expected': cumsums_expected_s}, columns=["winnings", "returns", "runs", "wins", "expected"])
df2通过一个函数运行每一行,该函数包含3列,并为每一行生成一个结果-specialSauce
df2= pd.DataFrame(list(map(lambda w,r,e: doStuff(w,r,e), df1['wins'], df1['runs'], df1['expected'])), columns=["specialSauce"])
print(df2.append(df1))
为df1生成除NaN之外的所有df1列(如果df1/df2在append中切换,则反之亦然)
所以我的问题是如何正确地附加这两个数据帧。好的,这里有几件事。你漏掉了代码,我不得不填补这些空白。例如,您没有定义
doStuff
,所以我不得不这样做
doStuff = lambda w, r, e: w + r + e
在定义了该定义后,您的代码将不会运行。我得猜你想干什么。我猜您希望在其他列旁边增加一个名为“SpecialSause”的列
所以,这就是我设置它并解决问题的方式
设置和解决方案
阿尔索
你试着用。根据链接文档,它将指定为参数的数据帧附加到要附加到的数据帧的末尾。您可能想使用。据我所知,您的问题似乎与您在结果
数据帧中得到NaN
有关
原因是您试图将一个数据帧.append()
添加到另一个数据帧,而它们的列不相同
df2
有一个额外的列,该列是用apply()
和doStuff
创建的,而df1
没有该列。当尝试将一个pd.DataFrame
追加到另一个pd.DataFrame
时,结果将同时包含所有列pd.DataFrame
对象。当然,您将为['specialsause']
设置一些NaN
,因为此列在df1
中不存在
如果要使用pd.concat()
,则这两种方法的作用相同。要使结果更接近您想要的结果,您可以做的一件事是使用ignore\u index
标记,如下所示:
>> df2.append(df1, ignore_index=True)
>> pd.concat([df1, df2], axis=1)
>> df1['specialSauce'] = <'specialSauce values'>
这至少会为结果pd.DataFrame
提供一个“新鲜”索引
编辑
如果您正在寻找的是以新列(['specialSauce']
)的形式将doStuff
的结果“附加”到现有df
的末尾,那么您需要做的是像这样使用pd.concat()
:
>> df2.append(df1, ignore_index=True)
>> pd.concat([df1, df2], axis=1)
>> df1['specialSauce'] = <'specialSauce values'>
这将根据需要返回结果pd.DataFrame
如果要将pd.Series
添加到df1
的列中,则需要按如下方式添加它:
>> df2.append(df1, ignore_index=True)
>> pd.concat([df1, df2], axis=1)
>> df1['specialSauce'] = <'specialSauce values'>
>df1['specialsause']=
我希望这会有所帮助,如果没有,请重新表述您所追求的内容。所有数据帧都有索引,已定义或默认,如果打印数据帧,则显示为第一列的数字[0…n]序列是默认索引。如果要使用ignore_index=True
追加或concat
,则会得到结果数据帧的“新鲜”范围。在pd.DataFrame
中没有索引是不可能的,即使你没有定义一个索引,你也可以免费得到一个:)这确实是我想要的。谢谢函数doStuff没有做任何特殊的事情,因此lambda是完全正常的。对我来说,令人困惑的方面最初可能是分配给单列数据帧SpecialSause。