pandas - 从多元组列中删除单个元组

标签 pandas

我有以下数据框:

<bound method DataFrame.info of <class 'pandas.core.frame.DataFrame'>
MultiIndex: 369416 entries, (datetime.datetime(2008, 1, 2, 16, 0), 'ABC') to     (datetime.datetime(2010, 12, 31, 16, 0), 'XYZ')
Data columns:
b_val    369416  non-null values
dtypes: float64(1)>

据此,我想要一个数据框,其中日期作为索引,“ABC”到“XYZ”作为列名,值作为“b_val”列下的值。我尝试这样做:

new_data = new_data.unstack()

但这给了我:

<bound method DataFrame.info of <class 'pandas.core.frame.DataFrame'>
Index: 757 entries, 2008-01-02 16:00:00 to 2010-12-31 16:00:00
Columns: 488 entries, ('b_val', 'ABC') to ('b_val', 'XYZ')
dtypes: float64(488)>

有没有办法以另一种方式转换它,或者有没有办法从每个列名中删除“b_val”?

最佳答案

我认为unstack是做你所做的事情的正确方法。

您可以使用 droplevel 从列名称(MultiIndex)中删除第一个级别:

df.columns = df.columns.droplevel(0)

这是一个例子:

df = pd.DataFrame([[1, 'a', 22], [1, 'b', 27], [2, 'a', 35], [2, 'b', 56]], columns=['date', 'name', 'value']).set_index(['date','name'])
df1 = df.unstack()

In [3]: df1
Out[3]:
      value
name      a   b
date
1        22  27
2        35  56

In [4]: df1.columns = df1.columns.droplevel(0)

In [5]: df1
Out[5]:
name   a   b
date
1     22  27
2     35  56

然而,一个更简洁的选择就是 unstack 专栏(系列):

In [6]: df.value.unstack()
Out[6]:
name   a   b
date
1     22  27
2     35  56

关于pandas - 从多元组列中删除单个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246004/

相关文章:

python - 在 pandas 中应用日期时间格式进行排序

python - 从数据框中完全消除行索引及其行

python - 基于列值的 Pandas COUNTIF

Python:不使用循环的列和行操作

python - 为什么 pandas 中的 neq 比较不一致?

python - 如何在 Python 中合并多个具有不同表列的 Excel 工作表?

python - Pandas 点格式日期

python-3.x - 在 Pandas 中的get_dummies之后保留NaN值

python - 通过 Pandas 将 CSV 插入 SQLITE : How to avoid the Memory Error?

python - 如何将 pandas df 保存到 Excel 工作表然后对其进行格式化?