使用多个过滤条件从较大的数据框中创建较小的数据框:使用python和pandas

时间:2018-11-15 11:54:18

标签: python pandas dataframe

早上好

基本上我有2个来自CSV的熊猫数据框:

数据框1 :每行是一个组,其中行索引是地理区域代码,列是前5个最相似的区域。例如:

       0    1    2    3    4    5    
Rank                                                       
00C   00C  03H  02D  05H  02E  04E  
00D   00D  02P  02X  01X  03R  06M  

数据框2 :这是一个较大的数据框,其中按年龄组,性别和地理区域细分了医院活动数量。例如:

     MALE_0-4  MALE_5-9           FEMALE_80-84  FEMALE_85+
06M        75        59                     43          48
00C       132       121                    173         204
01X        84        63                    124         102
03H       127       131                    130          83
02P        93        89                    208         151
02D        70        62                     92          81
05H        96        76                     52          32
00C       106        62                    123         106
03R        75        59                     43          48
02P        10       121                    173         204
03R        84        63                    124         102
03R        30       131                    130          83
02E        93        89                    208         151
06M        70        62                     92          81
04E        96        76                     52          32
00D       106        62                    123         106

我想做的是从数据框2创建较小的数据框-由数据框1中的分组过滤。每个地理区域代码可以出现在多个查找中。我有一个for循环的基本概念,但不能完全使其正常工作。

数据帧输出1

    MALE_0-4  MALE_5-9           FEMALE_80-84  FEMALE_85+
00C       132       121                    173         204
03H       127       131                    130          83
02D        70        62                     92          81
05H        96        76                     52          32
00C       106        62                    123         106
02E        93        89                    208         151
04E        96        76                     52          32

数据帧输出2

    MALE_0-4  MALE_5-9           FEMALE_80-84  FEMALE_85+
06M        75        59                     43          48
01X        84        63                    124         102
02P        93        89                    208         151
03R        75        59                     43          48
02P        10       121                    173         204
03R        84        63                    124         102
03R        30       131                    130          83
06M        70        62                     92          81
00D       106        62                    123         106

...

希望这是合理的,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

按链接的重复问题进行操作,这是您应使用的(概略):

for _, row in df1.iterrows():
    broken_down = df2[df2['region'].isin(row)]

答案 1 :(得分:0)

只需添加代码即可将其追加到列表中,以备将来使用。感谢sophros的解决:

broken_down = []
for _, row in df1.iterrows():
    broken_down.append(df2[df2['region'].isin(row)])