2017-04-11 162 views
1

我试图将数据帧附加在一起,当我找到它们在一个for循环,以及添加额外的列。熊猫dataFrame append并添加新列

我的意思是:

我有现成的数据帧X

a b c 
1 2 3 
5 6 7 
9 10 11 

我有一个循环,我“发现”符合条件的参数一定行。然后我想将这些行添加到一个空架,额外columns.so新的数据帧用Y为:

a b c next 
5 6 7 8 

哪里其次是新列添加。到目前为止,我试图用以下方式添加:

allInfo = pd.DataFrame(columns=[list(X), "next"]) 
allInfo = allInfo.append([a[a.apply(lambda x:someConditional,axis=1)], valueNext],ignore_index=True) 

但是这不起作用。有没有简单的方法来做到这一点?

谢谢!

+0

如果您提供了您的实际DataFrame和您正在执行的操作,我猜测这里有一个非常简单的链接操作。虽然没有详细说明,但很难给出一个很好的答案。 – miradulo

+0

我明白,但即时通讯工作的长度和宽度都非常大的数据帧。提供的代码是我使用的代码。 – JB1

回答

1

我认为最好的是在循环中创建DataFrames的列表,最后使用concat它们与原始的df一起使用。

final = pd.concat([df, df1, df2, df3,...]) 

但更好的是避免熊猫所有的循环,因为缓慢。

df1 = df[df.a == 5].copy() 
df1['next'] = 8 
print (df1) 
    a b c next 
1 5 6 7  8 

df2 = df[df.a == 1].copy() 
df2['next'] = 10 
print (df2) 
    a b c next 
0 1 2 3 10 

dfs = [df, df1, df2] 
final = pd.concat(dfs, ignore_index=True) 
print (final) 

    a b c next 
0 1 2 3 NaN 
1 5 6 7 NaN 
2 9 10 11 NaN 
3 5 6 7 8.0 
4 1 2 3 10.0 
+0

谢谢!这很棒。我工作在一个循环,所以将不得不稍微修改,但是是一个很大的帮助。 – JB1