将df1附加到df2的pandas在结果

时间:2016-04-27 03:49:41

标签: python pandas

我有2个数据帧。 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列,但是df1为NaN(反之,如果df1 / df2被追加,则反之亦然)

所以我遇到的问题是如何正确附加这两个数据帧。

2 个答案:

答案 0 :(得分:1)

根据我的理解,您的问题似乎与您在结果NaN中获得DataFrame的事实有关。

这样做的原因是,您尝试将.append()个数据框放到另一个数据框中,而它们没有相同的列。

df2有一个额外的列,使用apply()doStuff创建的列,而df1没有该列。尝试append一个pd.DataFrame到另一个时,结果将包含所有列pd.DataFrame个对象。当然,NaN会有['specialSauce']df1,因为pd.concat()中不存在此列。

如果您使用ignore_index,这将是相同的,在这种情况下,两种方法都做同样的事情。要使结果更接近您期望的结果,您可以做的一件事是使用>> df2.append(df1, ignore_index=True) 标志,如下所示:

pd.DataFrame

这至少会为您提供结果doStuff的“新鲜”索引。

修改

如果您要查找的内容是将df的结果以新列(['specialSauce'])的形式“追加”到现有pd.concat()的末尾,那么你要做的就是像这样使用>> pd.concat([df1, df2], axis=1)

pd.DataFrame

这将根据您的需要返回结果pd.Series

如果您要df1添加>> df1['specialSauce'] = <'specialSauce values'> 列,那么您需要像这样添加:

holder.imgProfilePic.setTag(accountId);

我希望这有帮助,如果不是,请重新描述您所追求的内容。

答案 1 :(得分:0)

好的,这里有几件事情。你已经离开了代码,我不得不填补空白。例如,您没有定义doStuff,所以我必须这样做。

doStuff = lambda w, r, e: w + r + e

根据定义,您的代码不会运行。我不得不猜测你要做什么。我猜你想在你的其他列旁边添加一个名为'specialSauce'的列。

所以,这就是我设置它并解决问题的方法。

设置和解决方案

import pandas as pd
import numpy as np

np.random.seed(314)
df = pd.DataFrame(np.random.randn(100, 6),
                  columns=["winnings", "returns",
                           "spent", "runs",
                           "wins", "expected"]).cumsum()

doStuff = lambda w, r, e: w + r + e

df['specialSauce'] = df[['wins', 'runs', 'expected']].apply(lambda x: doStuff(*x), axis=1)

print df.head()

   winnings   returns     spent      runs      wins  expected  specialSauce
0  0.166085  0.781964  0.852285 -0.707071 -0.931657  0.886661     -0.752067
1 -0.055704  1.163688  0.079710  0.155916 -1.212917 -0.045265     -1.102266
2 -0.554241  1.928014  0.271214 -0.462848  0.452802  1.692924      1.682878
3  0.627985  3.047389 -1.594841 -1.099262 -0.308115  4.356977      2.949601
4  0.796156  3.228755 -0.273482 -0.661442 -0.111355  2.827409      2.054611

同时

您尝试使用pd.DataFrame.append()。根据链接的文档,它将指定为参数的DataFrame附加到要附加到的DataFrame的末尾。您本来想使用pd.DataFrame.concat()