3 回答
TA贡献1809条经验 获得超8个赞
IIUC,你user
是空的,一切都在name
。如果是这样,你可以
pd.pivot_table(df, index=df.name.str[0], columns=df.name.str[1:].values, aggfunc='count').fillna(0)
TA贡献1842条经验 获得超12个赞
您可以在拆分的每一行name使用r'(\d+)'从字母单独的数字,与使用pd.crosstab:
d = pd.DataFrame(df.name.str.split(r'(\d+)').values.tolist())
pd.crosstab(columns=d[2], index=d[1], values=d[1], aggfunc='count')
TA贡献1744条经验 获得超4个赞
假设以下数据帧:
user name
0 1 a
1 1 b
2 1 c
3 1 d
4 2 a
5 2 b
6 2 c
7 3 d
8 3 e
9 3 f
你可以GROUPBY用户,然后使用get_dummmies:
import pandas as pd
# create data-frame
data = [[1, 'a'], [1, 'b'], [1, 'c'], [1, 'd'], [2, 'a'],
[2, 'b'], [2, 'c'], [3, 'd'], [3, 'e'], [3, 'f']]
df = pd.DataFrame(data=data, columns=['user', 'name'])
# group and get_dummies
grouped = df.groupby('user')['name'].apply(lambda x: '|'.join(x))
print(grouped.str.get_dummies())
输出
a b c d e f
user
1 1 1 1 1 0 0
2 1 1 1 0 0 0
3 0 0 0 1 1 1
作为旁注,您可以在一行中完成所有操作:
result = df.groupby('user')['name'].apply(lambda x: '|'.join(x)).str.get_dummies()
添加回答
举报