pandas将行迭代到新的数据帧

时间:2018-01-04 15:58:30

标签: python pandas

如何使用该系列对行进行操作并形成新的数据框?

假设我有一个数据框 df ,我正在使用以下内容迭代df并尝试追加空数据框

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
                    columns=['a', 'b', 'c', 'd', 'e'])

df1 = pd.DataFrame()
df2 = pd.DataFrame()

for index,row in df.iterrows():
    if (few conditions goes here):
        df1.append(row)
    else:
        df2.append(row)

迭代中每行的类型是一个序列,但是如果我将它附加到空数据帧,它会将行作为列和列附加为行。有没有解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为最好避免迭代并使用boolean indexing条件&AND|OR ~NOT^的{​​{1}}和XOR的{​​{1}}:

#define all conditions
mask = (df['a'] > 2) & (df['b'] > 3)
#filter
df1 = df[mask]
#invert condition by ~
df2 = df[~mask]

样品:

np.random.seed(125)
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5)),
                    columns=['a', 'b', 'c', 'd', 'e'])
print (df)
   a  b  c  d  e
0  2  7  3  6  0
1  5  6  2  5  0
2  4  2  9  0  7
3  2  7  9  5  3
4  5  7  9  9  1

mask = (df['a'] > 2) & (df['b'] > 3)
print (mask)
0    False
1     True
2    False
3    False
4     True


df1 = df[mask]
print (df1)
   a  b  c  d  e
1  5  6  2  5  0
4  5  7  9  9  1

df2 = df[~mask]
print (df2)
   a  b  c  d  e
0  2  7  3  6  0
2  4  2  9  0  7
3  2  7  9  5  3

编辑:

循环版本,如果可能的话不要使用它因为慢:

df1 = pd.DataFrame(columns=df.columns)
df2 = pd.DataFrame(columns=df.columns)

for index,row in df.iterrows():
    if (row['a'] > 2) and (row['b'] > 3):
       df1.loc[index] = row
    else:
       df2.loc[index] = row


print (df1)
   a  b  c  d  e
1  5  6  2  5  0
4  5  7  9  9  1

print (df2)
   a  b  c  d  e
0  2  7  3  6  0
2  4  2  9  0  7
3  2  7  9  5  3

答案 1 :(得分:1)

尝试使用query方法

df2 = df1.query('conditions go here')