python - Python - 根据表列中的逗号分隔值写入新行
问题描述
我有一个示例数据集:
column1 column2 column3 column4 column5
a b c paddy, jimmy, john [242352, 2351235, 65436324]
a z c james, jill, jillian [325134, 63464374568, 43574578654]
s t y patsy [463465573452]
我想用逗号分隔'column4'和'column5'。这样第 4 列和第 5 列只有一个值。该行的其余部分将被重复。
结果数据框的示例:
column1 column2 column3 column4 column5
a b c paddy 242352
a b c jimmy 2351235
a b c john 65436324
.......
任何解决方案表示赞赏。我看过以前关于堆栈溢出的类似问题,但是因为我有浮点值,所以给出的解决方案对我不起作用。
解决方案
使用pd.reindex
和pd.index.repeat
重复行。
然后使用str.extractall
仅从col5
and中提取数字str.split
,stack
扩展col4
andcol5
# Reindex and repeat cols on len of split and reset index
df1 = df.reindex(df.index.repeat(df['column4'].fillna("").str.split(',').apply(len)))
df1 = df1.drop(['column4','column5'],1)
# Splitting both cols
s = df['column4'].str.split(',', expand=True).stack().reset_index(level=1,drop=True)
s1 = df['column5'].str.extractall('(\d+)').reset_index(level=1,drop=True)[0]
# Now grouping the series and df using cumcount.
df1 = df1.set_index(df1.groupby(df1.index).cumcount(), append=True)
s = s.to_frame('column4').set_index(s.groupby(s.index).cumcount(), append=True)
s1 = s1.to_frame('column5').set_index(s1.groupby(s1.index).cumcount(), append=True)
# Joining the all of them together and reset index.
df1 = df1.join(s, how='outer').join(s1,how='outer').reset_index(level=[0,1],drop=True)
print (df1)
输出:
column1 column2 column3 column4 column5
0 a b c paddy 242352
1 a b c jimmy 2351235
2 a b c john 65436324
3 a z c james 325134
4 a z c jill 63464374568
5 a z c jillian 43574578654
6 s t y patsy 463465573452
推荐阅读
- python - 我有一个 CMake 文件,我想在 python 中执行它
- python - Sizer.Remove():参数不匹配任何重载调用
- enums - Laravel 5.8 Unknow database type enum requested, Doctrine\DBAL\Platforms\MariaDb1027Platform 可能不支持
- powerbi - 新工作区中的 RLS 以及查看者和成员权限
- powershell - 尝试将 New-JobSchedule 与 -Argumentlist 一起使用时出错
- c++ - 能
和分别 可用于 Windows 和 Linux? - python - 如何比较熊猫中的两列,但保留匹配的数据?
- java - Java 路径问题,'java' 未被识别为内部或外部命令、可运行程序或批处理文件。(javac也是)
- java - IntelliJ 调试断点不适用于 Tomcat 运行配置
- sql - 等同于 Keep in Snowflake