我有两个数据框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的前两列,因为
len(df1)
会让我知道在两列后和A_bin
将会出现。因此,当我在df2的第一列时,添加
B_bin
将使我进入len(df1)
并对其进行迭代以检查值是否为1并将其存储在单独的数据帧中。同样,当我在
A_bin
的第二列时,添加df2
将把我放在len(df2)
上,并将其结果存储在B_bin
中。在单独的数据框中的预期结果。
df_result_A
A B C D E
2 6 5 4 1
1 2 8 4 9
3 4 2 9 3
df_result_b
A B C D E
5 1 2 2 4
7 3 5 1 7
1 2 8 4 9
最佳答案
您可以执行以下操作:
样本数据框:
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
过滤第三和第四列的行(按照您的示例),并将其存储在字典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
因此,您不必担心确切的列名。
让我知道是否有帮助。
关于python - 从数据框中选择具有特定列和条件的行(不使用列名),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53062219/