Ale*_*lex 2 python dataframe pandas
我有一个数据框,例如如下:
import pandas as pd
my_df = pd.DataFrame({'col1':['A', 'B', 'C', 'A', 'A', 'B'],
'col2':['foo bar', 'bar', 'something foo', 'foo', 'bar', 'foo']})
Run Code Online (Sandbox Code Playgroud)
我想为其中一列中出现的每个单词生成列,例如col2,并计算该行中出现的次数.
col1 col2 foo bar something
0 A foo bar 1 1 0
1 B bar 0 1 0
2 C something foo 1 0 1
3 A foo 1 0 0
4 A bar 0 1 0
5 B foo 1 0 0
Run Code Online (Sandbox Code Playgroud)
我的数据框比这个例子要大得多.每列可以有多个单词.
你需要join+ get_dummies:
df = my_df.join(pd.get_dummies(my_df['col2']))
print (df)
col1 col2 bar foo something
0 A foo 0 1 0
1 B bar 1 0 0
2 C something 0 0 1
3 A foo 0 1 0
4 A bar 1 0 0
5 B foo 0 1 0
Run Code Online (Sandbox Code Playgroud)
编辑 - 是必要的str.get_dummies:
df = my_df.join(my_df['col2'].str.get_dummies(' '))
print (df)
col1 col2 bar foo something
0 A foo bar 1 1 0
1 B bar 1 0 0
2 C something foo 0 1 1
3 A foo 0 1 0
4 A bar 1 0 0
5 B foo 0 1 0
Run Code Online (Sandbox Code Playgroud)
但如果一行中有多个相同的单词并需要计算它们:
my_df = pd.DataFrame({'col1':['A', 'B', 'C', 'A', 'A', 'B'],
'col2':['foo bar foo', 'bar', 'something foo', 'foo', 'bar', 'foo']})
print (my_df)
col1 col2
0 A foo bar foo
1 B bar
2 C something foo
3 A foo
4 A bar
5 B foo
df = my_df.join(my_df['col2'].str.split(expand=True)
.apply(pd.value_counts,1)
.fillna(0)
.astype(int))
print (df)
col1 col2 bar foo something
0 A foo bar foo 1 2 0
1 B bar 1 0 0
2 C something foo 0 1 1
3 A foo 0 1 0
4 A bar 1 0 0
5 B foo 0 1 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |