我有两个数据框df1
和df2
,
df1
A B
2 6
5 1
7 3
1 2
9 7
4 7
3 4
8 9
和df2
包含
A B A_bin B_bin C D E
2 6 1 2 5 4 1
5 1 2 1 2 2 4
7 3 3 1 5 1 7
1 2 1 1 8 4 9
9 7 3 3 5 5 8
4 7 2 3 1 8 5
3 4 1 2 2 9 3
8 9 3 3 4 6 2
我正在尝试为所有具有df2
的行选择从df_result_A
到新数据框A_bin = 1
的那些特定行。
类似地,一个单独的数据帧df_result_B
具有df2
的所有那些行,使得B_bin
行包含1。
我发现很难输入逻辑错误的语法或逻辑错误,
for i in range(len(df1(df2[columns])+len(df)):
if(row value is 1)
print in df_result_A
print in df_result_B
由于面临的挑战是不使用列名和索引,因为代码也应针对其他数据集运行。我尝试首先将df2的前两列迭代为{{1 }}让我知道len(df1)
和A_bin
两列之后。
因此,当我在df2的第一列时,添加B_bin
将使我进入len(df1)
并对其进行迭代以检查值是否为1并将其存储在单独的数据帧中。
同样,当我在A_bin
的第二列时,添加df2
将把我放在len(df2)
上,并将其结果存储在B_bin
中。
在单独的数据框中获得预期结果。
df_result_A
df_result_B
df_result_b
A B C D E
2 6 5 4 1
1 2 8 4 9
3 4 2 9 3
答案 0 :(得分:2)
您可以执行以下操作:
示例数据帧:
In [31]: df1
Out[31]:
A B
0 2 6
1 5 1
2 7 3
3 1 2
4 9 7
5 4 7
6 3 4
7 8 9
In [36]: df2
Out[36]:
A B A_bin B_bin C D E
0 2 6 1 2 5 4 1
1 5 1 2 1 2 2 4
2 7 3 3 1 5 1 7
3 1 2 1 1 8 4 9
4 9 7 3 3 5 5 8
5 4 7 2 3 1 8 5
6 3 4 1 2 2 9 3
7 8 9 3 3 4 6 2
有一个变量count
和一个空字典来即时存储新数据帧。
count = 0
d = dict()
我已使用您的逻辑根据df1
的列长选择每第3列。
for col in df2.columns:
print(col)
l = df1.shape[1]
if count < l:
d[col] = df2[ df2.iloc[:, count + l] == 1 ]
count += 1
这会循环df2
的列,直到变量count
小于df1
的列数。它过滤值为1
的第3和第4 cols行(按照您的示例),并将其存储在字典d
中。
现在,您可以遍历字典并找到所需的新数据框:
In [52]: for key in d.keys():
...: print(d[key][d[key].columns.drop(list(d[key].filter(regex='bin')))])
A B C D E
0 2 6 5 4 1
3 1 2 8 4 9
6 3 4 2 9 3
A B C D E
1 5 1 2 2 4
2 7 3 5 1 7
3 1 2 8 4 9
因此,您不必担心确切的列名。 让我知道是否有帮助。