【发布时间】:2021-10-11 09:52:54
【问题描述】:
我有以下df:
df6 = pd.DataFrame({'name':['Sara', 'John', 'Jack'],
'places': ['UK,UK,UK,UK,US,CA', 'US,US,US,CA,CA,CA', 'Mexico,AUS,AUS,Mexico,Mexico']
})
df6
看起来像:
name places
0 Sara UK,UK,UK,UK,US,CA
1 John US,US,US,CA,CA,CA
2 Jack Mexico,AUS,AUS,Mexico,Mexico
地点列仅关注 5 个国家/地区。我要做的是找出每个国家连续访问的次数。所以基本上输出会是这样的:
name UK US CA Mexico AUS
0 Sara 4 0 0 0 0
1 John 0 3 3 0 0
2 Jack 0 0 0 2 2
到目前为止我所做的步骤是:
df6['consecutive'] = df6.places.map(lambda x: [Counter(group[1]) for group in groupby(x.split(','))])
这给了我一个list of dicts:
name places consecutive
0 Sara UK,UK,UK,UK,US,CA [{'UK': 4}, {'US': 1}, {'CA': 1}]
1 John US,US,US,CA,CA,CA [{'US': 3}, {'CA': 3}]
2 Jack Mexico,AUS,AUS,Mexico,Mexico [{'Mexico': 1}, {'AUS': 2}, {'Mexico': 2}]
现在我坚持如何遍历连续列中的每个单元格以找到每个单元格的 values > 1 并将 df6 重塑为最终输出:
name UK US CA Mexico AUS
0 Sara 4 0 0 0 0
1 John 0 3 3 0 0
2 Jack 0 0 0 2 2
【问题讨论】:
-
你只取最大连续值还是最后一个?杰克有墨西哥 1 和墨西哥 2。
-
Values > 1 因为在我的数据中,如果值为 1,则意味着只有一次访问,所以对于 Jack,我选择墨西哥 2 和 AUS 2
-
是的,但是如果 Jack 你有
Mexico, Mexico, Mexico, AUS, AUS, Mexico, Mexico你会保留什么?
标签: python-3.x pandas list dataframe