我有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被追加,则反之亦然)
所以我遇到的问题是如何正确附加这两个数据帧。
答案 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()
。