2017-06-05 158 views
2

我想根据原始数据框的基础上创建一个新的数据框。Python数据框复制

df = pandas.io.sql.read_sql(sql, conn) 

Count_Row = df.shape[0] 
for j in range(Count_Row - 1): 

    if df.iloc[j, 0] == df.iloc[j + 1, 0]: 
     print(df.iloc[j, 2] + df.iloc[j + 1, 2], df.iloc[j, 4], df.iloc[j, 6], df.iloc[j, 3]) 

但是,不打印我想将该数据添加到新的数据框。

这怎么可能?

回答

1

而不是打印出来的数据,你可以将其追加到新的数据帧

import pandas as pd 

df = pandas.io.sql.read_sql(sql, conn) 
Count_Row = df.shape[0] 

results = pd.DataFrame() # create data frame to store results 

for j in range(Count_Row - 1): 
    if df.iloc[j, 0] == df.iloc[j + 1, 0]: 
     # create row of values to append 
     row = pd.Series([df.iloc[j, 2] + df.iloc[j + 1, 2], 
         df.iloc[j, 4], 
         df.iloc[j, 6], 
         df.iloc[j, 3]]) 
     results = results.append([row]) 

results.columns = ['v1', 'v2', 'v3', 'v4'] # the variables 

这会给你所需要的输出数据帧

1

不要使用慢“for”循环来做到这一点。相反,生成一个面具是真正你想要的元素,然后选择这些元素:

matches = df.iloc[:-1,0] == df.iloc[1:,0] 
new_df = df.iloc[:-1][matches] 

这将是比你以前有办法10-100更快。

最后,new_df将包含所选行的副本。

[:-1]表示“最后一个之前的所有元素”。