合并2个熊猫字典列



我在这里简化了一个数据帧,它有3列。

| id | channels | facebookCount |
|:---- |:------:| -----:|
| 0  | {'channel': 'Google', 'count': 0.0}    | 3 |
| 1  | {'channel': 'Google', 'count': 4.0}    | 0 |
| 2  | {'channel': 'Google', 'count': 3.0}    | 6 |

channels列是类似于facebookCount的简单计数列。然而,我使用applylambda将其转换为字典:

data_df["channels"] = data_df["googleCount"].apply(
lambda x: {} if x is None else {"channel": "Google", "count": x})

我如何构建频道列,使其既有脸书和谷歌的数据,这样我就有了一个包含2个字典的列表,如下所示:

| id | channels |
|:---- |:------:|
| 0   | [{'channel': 'Google', 'count': 0.0}, {'channel': 'Facebook', 'count': 3.0}] |
| 1   | [{'channel': 'Google', 'count': 4.0}, {'channel': 'Facebook', 'count': 0.0}] |
| 2   | [{'channel': 'Google', 'count': 3.0}, {'channel': 'Facebook', 'count': 6.0}] |

我尝试过创建两个字典,然后设置通道,创建一个字典,再使用apply和lambda以及等辅助函数合并2

dict1 = data_df["30DayGoogleCampaignCount"].apply(
lambda x: {"channel": "Google", "count": x})
data_df["paidMediaChannels"] = data_df["30DayFacebookCampaignCount"].apply(
lambda x: self.Merge(dict1, {"channel": "facebook", "count": x}))

def Merge(self, dict1, dict2):
return(dict2.update(dict1))

尝试以下操作:

import pandas as pd
df = pd.DataFrame({'id': [0, 1, 2],
'channels': [{'channel': 'Google', 'count': 0.0},
{'channel': 'Google', 'count': 4.0},
{'channel': 'Google', 'count': 3.0}],
'facebookCount': [3, 0, 6]})
# Create List
df['channels'] = df.apply(
lambda x: [x['channels'],
{'channel': 'Facebook',
'count': x['facebookCount']}],
axis=1
)
# Drop facebookCount Column
df = df.drop(columns='facebookCount')
print(df.to_string())

df:

id                                                                    channels
0   0  [{'channel': 'Google', 'count': 0.0}, {'channel': 'Facebook', 'count': 3}]
1   1  [{'channel': 'Google', 'count': 4.0}, {'channel': 'Facebook', 'count': 0}]
2   2  [{'channel': 'Google', 'count': 3.0}, {'channel': 'Facebook', 'count': 6}]

最新更新