2017-04-11 209 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