使用字典作为参考来从另一个数据框中计算熊猫数据框中的新列数

时间:2019-03-20 00:27:05

标签: python pandas dictionary

我认为,我正在尝试解决一个稍微复杂的问题。这是抽象版本。我在字典中存储了一个UID及其朋友列表:

In[1]:friend_list
Out[1]:{111:[112, 113, 115],
        112:[111, 114, 115],
        113:[111, 114],
        114:[112, 113, 115],
        115:[111, 112, 114]}

我还有两个数据框,其中包含有关这些UID的一些信息:

df1:

|   | UID | Sex | Infected |
|:-:|:---:|:---:|:--------:|
| 0 | 111 |  M  |   True   |
| 1 | 112 |  F  |   True   |
| 2 | 113 |  F  |   False  |
| 3 | 114 |  M  |   False  |
| 4 | 115 |  F  |   False  |

df2:

|   | UID |  Job  | Vaccinated |
|:-:|:---:|:-----:|:----------:|
| 0 | 111 | False |    True    |
| 1 | 112 |  True |    True    |
| 2 | 113 |  True |    False   |
| 3 | 114 |  True |    False   |
| 4 | 115 | False |    False   |

我想使用字典和df2来计算每个人有多少朋友在工作和接种疫苗(作为单独的列),并将其作为一列,这样输出如下:

df1:

|   | UID | Sex | Infected | nFriends_Job | nFriends_Vacc |
|:-:|:---:|:---:|:--------:|:------------:|:-------------:|
| 0 | 111 |  M  |   True   |       2      |       1       |
| 1 | 112 |  F  |   True   |       1      |       1       |
| 2 | 113 |  F  |   False  |       1      |       1       |
| 3 | 114 |  M  |   False  |       2      |       1       |
| 4 | 115 |  F  |   False  |       2      |       2       |

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我们在isin查找中使用for循环,dict创建所需的值

l=[(df2.loc[df2.UID.isin(d[x]),'Job'].sum(),df2.loc[df2.UID.isin(d[x]),'Vaccinated'].sum()) for x in df1.UID]
#here we create the new df to concat
newdf=pd.DataFrame(l,columns=['nFriends_Jobs','nFriends_Vacc '],index=df1.index)
df1=pd.concat([df1,newdf],1)
df1
Out[187]: 
   UID Sex  Infected  nFriends_Jobs  nFriends_Vacc 
0  111   M      True              2               1
1  112   F      True              1               1
2  113   F     False              1               1
3  114   M     False              2               1
4  115   F     False              2               2