pandas - 按元素拆分列并使用 pandas 创建新列
问题描述
目标:我想按元素(而不是字符串单元格)拆分一列,并从该划分中创建新列,其中元素是新列的标题,另一列中的其他值组成相应的列。
有没有办法用熊猫做到这一点?提前致谢。
例子:
[IN]:
A 1
A 2
A 6
A 99
B 7
B 8
B 19
B 18
[OUT]:
A B
1 7
2 8
6 19
99 18
解决方案
使用Series.str.split
withGroupBy.cumcount
计数器,然后通过DataFrame.set_index
with重塑Series.unstack
:
print (df)
col
0 A 1
1 A 2
2 A 6
3 A 99
4 B 7
5 B 8
6 B 19
7 B 18
df1 = df['col'].str.split(expand=True)
g = df1.groupby(0).cumcount()
df2 = df1.set_index([0, g])[1].unstack(0).rename_axis(None, axis=1)
print (df2)
A B
0 1 7
1 2 8
2 6 19
3 99 18
如果 2 列输入数据:
print (df)
col1 col2
0 A 1
1 A 2
2 A 6
3 A 99
4 B 7
5 B 8
6 B 19
7 B 18
g = df.groupby('col1').cumcount()
df2 = df.set_index(['col1', g])['col2'].unstack(0).rename_axis(None, axis=1)
print (df2)
A B
0 1 7
1 2 8
2 6 19
3 99 18
推荐阅读
- linux - Linux:写入带有字段的文件,保持列对齐
- mysql - 使用 COUNT 和 INNER JOIN 选择查询
- ruby-on-rails - 自定义本地 gem:Bundler::GemNotFound: 找不到 gem
- windows - 赛普拉斯:如何测试 Windows 窗口以保存数据?
- keras - 带分类的 LSTM
- python - “NoneType”对象没有属性“_fields”(ODOO 12)
- c++ - 执行时使用 boost::asio::deadline_timer 时出错
- python-3.x - 我正在尝试使用 csv 库计算 csv 文件的每种语法的情感分数
- perl - 在 Windows 中获取 win32 守护程序状态的整数值而不获取当前状态
- netcat - 如何从同一个端口同时监听 udp 和 tcp?