【发布时间】:2018-02-13 21:49:43
【问题描述】:
这个问题类似于Split (explode) pandas dataframe string entry to separate rows,但包含一个关于添加范围的问题。
我有一个数据框:
+------+---------+----------------+
| Name | Options | Email |
+------+---------+----------------+
| Bob | 1,2,4-6 | bob@email.com |
+------+---------+----------------+
| John | NaN | john@email.com |
+------+---------+----------------+
| Mary | 1,2 | mary@email.com |
+------+---------+----------------+
| Jane | 1,3-5 | jane@email.com |
+------+---------+----------------+
我希望Options 列被逗号分隔,以及为范围添加的行。
+------+---------+----------------+
| Name | Options | Email |
+------+---------+----------------+
| Bob | 1 | bob@email.com |
+------+---------+----------------+
| Bob | 2 | bob@email.com |
+------+---------+----------------+
| Bob | 4 | bob@email.com |
+------+---------+----------------+
| Bob | 5 | bob@email.com |
+------+---------+----------------+
| Bob | 6 | bob@email.com |
+------+---------+----------------+
| John | NaN | john@email.com |
+------+---------+----------------+
| Mary | 1 | mary@email.com |
+------+---------+----------------+
| Mary | 2 | mary@email.com |
+------+---------+----------------+
| Jane | 1 | jane@email.com |
+------+---------+----------------+
| Jane | 3 | jane@email.com |
+------+---------+----------------+
| Jane | 4 | jane@email.com |
+------+---------+----------------+
| Jane | 5 | jane@email.com |
+------+---------+----------------+
我如何才能像参考 SO 文章所说的那样使用 concat 和 split 来实现这一点?我需要一种添加范围的方法。
那篇文章使用以下代码来拆分逗号分隔的值 (1,2,3):
In [7]: a
Out[7]:
var1 var2
0 a,b,c 1
1 d,e,f 2
In [55]: pd.concat([Series(row['var2'], row['var1'].split(','))
for _, row in a.iterrows()]).reset_index()
Out[55]:
index 0
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 2
提前感谢您的建议!
更新 2/14 示例数据已更新以匹配我当前的情况。
【问题讨论】:
-
@cᴏʟᴅsᴘᴇᴇᴅ 我做了一些更改。您介意取消将此标记为重复问题吗?
-
好的,很公平。重新打开。
标签: python pandas numpy dataframe