python - Pandas 在数据框中组合稀疏列

标签 python pandas dataframe

我正在使用 Python、Pandas 进行数据分析。我在不同的列中有稀疏分布的数据,如下所示

| id | col1a | col1b | col2a | col2b | col3a | col3b |
|----|-------|-------|-------|-------|-------|-------|
|  1 |   11  |   12  |  NaN  |  NaN  |  NaN  |  NaN  |
|  2 |  NaN  |  NaN  |   21  |   86  |  NaN  |  NaN  |
|  3 |   22  |   87  |  NaN  |  NaN  |  NaN  |  NaN  |
|  4 |  NaN  |  NaN  |   NaN |  NaN  |  545  |   32  |
我想将不同列中的这些稀疏分布的数据组合到如下所示的紧密排列的列中。
| id | group |  cola |  colb |
|----|-------|-------|-------|
| 1  |  g1   |   11  |   12  |
| 2  |  g2   |   21  |   86  |
| 3  |  g1   |   22  |   87  |
| 4  |  g3   |  545  |   32  |
我尝试过的是以下操作,但无法正确执行
df['cola']=np.nan
df['colb']=np.nan
df['cola'].fillna(df.col1a,inplace=True)
df['colb'].fillna(df.col1b,inplace=True)
df['cola'].fillna(df.col2a,inplace=True)
df['colb'].fillna(df.col2b,inplace=True)
df['cola'].fillna(df.col3a,inplace=True)
df['colb'].fillna(df.col3b,inplace=True)
但我认为必须有更简洁有效的方法来做到这一点。如何以更好的方式做到这一点?

最佳答案

您可以使用 df.stack() 假设 'id'您的索引是否已设置 'id'作为索引。然后使用 pd.pivot_table .

df = df.stack().reset_index(name='val',level=1)
df['group'] = 'g'+ df['level_1'].str.extract('col(\d+)')
df['level_1'] = df['level_1'].str.replace('col(\d+)','')
df.pivot_table(index=['id','group'],columns='level_1',values='val')

level_1    cola  colb
id group
1  g1      11.0  12.0
2  g2      21.0  86.0
3  g1      22.0  87.0
4  g3     545.0  32.0

关于python - Pandas 在数据框中组合稀疏列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62248185/

相关文章:

python - 用于多个起始值和终止值的矢量化 NumPy linspace

python - pandas 数据帧内存 python

python - 使用 unittest 框架测试 pandas 数据框

python - Pandas:从 DataFrame 列制作字典的最有效方法

python - 将字典键转换为具有字典值的变量的最佳方法是什么?

python - 如何使用 HtmlXPathSelector (Scrapy) 以 HTML 形式返回结果

Python:分解大文件,根据条件过滤,并将所有数据放入新的csv文件中

python - 如何在多平台环境中从文件夹导入多个 csv 文件

python - Pandas 数据框到字典的稀疏字典

python - 如何使用 Python 输出嵌套循环的结果