从具有特定列和条件的数据框中选择行(不使用列名)

我有两个数据框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)都会让我知道2列之后A_bin,并B_bin会来的。因此,当我在 df2 的第一列上时,添加len(df1)将使我打开A_bin并迭代它以检查值是否为 1 并将其存储在单独的数据帧中。同样,当我在df2添加的第二列上时,len(df2)会将我置于其中B_bin,从而将其结果存储在df_result_B. 单独数据帧中的预期结果。


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


开心每一天1111
浏览 163回答 1
1回答

临摹微笑

你可以这样做:示例数据框:In [31]: df1Out[31]:&nbsp;&nbsp; &nbsp;A&nbsp; B0&nbsp; 2&nbsp; 61&nbsp; 5&nbsp; 12&nbsp; 7&nbsp; 33&nbsp; 1&nbsp; 24&nbsp; 9&nbsp; 75&nbsp; 4&nbsp; 76&nbsp; 3&nbsp; 47&nbsp; 8&nbsp; 9In [36]: df2Out[36]:&nbsp;&nbsp; &nbsp;A&nbsp; B&nbsp; A_bin&nbsp; B_bin&nbsp; C&nbsp; D&nbsp; E0&nbsp; 2&nbsp; 6&nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; 2&nbsp; 5&nbsp; 4&nbsp; 11&nbsp; 5&nbsp; 1&nbsp; &nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp; 1&nbsp; 2&nbsp; 2&nbsp; 42&nbsp; 7&nbsp; 3&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp; 1&nbsp; 5&nbsp; 1&nbsp; 73&nbsp; 1&nbsp; 2&nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; 1&nbsp; 8&nbsp; 4&nbsp; 94&nbsp; 9&nbsp; 7&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp; 3&nbsp; 5&nbsp; 5&nbsp; 85&nbsp; 4&nbsp; 7&nbsp; &nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp; 3&nbsp; 1&nbsp; 8&nbsp; 56&nbsp; 3&nbsp; 4&nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; 2&nbsp; 2&nbsp; 9&nbsp; 37&nbsp; 8&nbsp; 9&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp; 3&nbsp; 4&nbsp; 6&nbsp; 2有一个变量count和一个空字典来动态存储新的数据帧。count = 0d = dict()我已经使用您的逻辑根据df1.for col in df2.columns:&nbsp; &nbsp; print(col)&nbsp; &nbsp; l = df1.shape[1]&nbsp; &nbsp; if count < l:&nbsp; &nbsp; &nbsp; &nbsp; d[col] = df2[ df2.iloc[:, count + l] == 1 ]&nbsp; &nbsp; count += 1这会遍历 的列,df2直到变量count小于 的列数df1。它过滤第 3 和第 4 列(根据您的示例)的行,其值为1和 存储在字典中d。现在,您可以遍历您的字典并找到您想要的新数据框:In [52]: for key in d.keys():&nbsp; &nbsp; ...:&nbsp; &nbsp; &nbsp;print(d[key][d[key].columns.drop(list(d[key].filter(regex='bin')))])&nbsp; &nbsp;A&nbsp; B&nbsp; C&nbsp; D&nbsp; E0&nbsp; 2&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 13&nbsp; 1&nbsp; 2&nbsp; 8&nbsp; 4&nbsp; 96&nbsp; 3&nbsp; 4&nbsp; 2&nbsp; 9&nbsp; 3&nbsp; &nbsp;A&nbsp; B&nbsp; C&nbsp; D&nbsp; E1&nbsp; 5&nbsp; 1&nbsp; 2&nbsp; 2&nbsp; 42&nbsp; 7&nbsp; 3&nbsp; 5&nbsp; 1&nbsp; 73&nbsp; 1&nbsp; 2&nbsp; 8&nbsp; 4&nbsp; 9因此,您不必担心确切的列名称。如果这有帮助,请告诉我。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python