Python 将df1追加到df2的熊猫在结果中获得0s/nan

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包含一系列值

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。