如何使用该系列对行进行操作并形成新的数据框?
假设我有一个数据框 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)
迭代中每行的类型是一个序列,但是如果我将它附加到空数据帧,它会将行作为列和列附加为行。有没有解决这个问题?
答案 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')