我的数据框看起来像这样
具有多个针对用户的分类变量的熊猫数据框
我确保其中没有重复。我想对其进行编码,并希望这样的最终输出
我尝试直接使用熊猫假人,但没有得到想要的结果。 有人可以帮我吗?
答案 0 :(得分:1)
IIUC,您的user
为空,所有内容都在name
上。如果是这样,您可以
pd.pivot_table(df, index=df.name.str[0], columns=df.name.str[1:].values, aggfunc='count').fillna(0)
答案 1 :(得分:1)
您可以使用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')
答案 2 :(得分:0)
您可以尝试使用str
get_dummies
列访问groupby
访问器user
:
df.name.str.get_dummies().groupby(df.user).sum()
给出示例数据框
df = pd.DataFrame({'user': [1]*4 + [2]*4 + [3]*3,
'name': ['a', 'b', 'c', 'd']*2 + ['d', 'e', 'f']})
df_dummies = df.name.str.get_dummies().groupby(df.user).sum()
print(df_dummies)
[出]
a b c d e f
user
1 1 1 1 1 0 0
2 1 1 1 1 0 0
3 0 0 0 1 1 1
答案 3 :(得分:0)
假定以下数据框:
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()