使用DataFrame列作为索引,并将重复项追加为新列

尼利

我有一个DataFrame,其中包含一列带有我想用作我的DataFrame索引的日期。该列中的日期不一定是唯一的-有时可能有重复。我希望将重复项添加为新列唯一的日期可以仅包含NaN(或其他任何值)以用于新添加的列。

为了澄清,我将提供一个示例:

import pandas as pd

data = [
        {'Date':'01-01-2020','A':0,'B':1},
        {'Date':'01-01-2020','A':2,'B':3},
        {'Date':'02-01-2020','A':4,'B':5},
        {'Date':'02-01-2020','A':6,'B':7},
        {'Date':'03-01-2020','A':8,'B':9},
]

df = pd.DataFrame(data)

这将产生:

    Date        A   B
0   01-01-2020  0   1
1   01-01-2020  2   3
2   02-01-2020  4   5
3   02-01-2020  6   7
4   03-01-2020  8   9

我想要的是:

            A   B   C   D
Date        
01-01-2020  0   1   2   3
02-01-2020  4   5   6   7
03-01-2020  8   9   NaN NaN

新添加的列的名称可以是任意的。我什至不知道追加是否是正确的解决方法。从头开始创建新的DataFrame也许更容易。

耶斯列尔

DataFrame.set_index与一起使用DataFrame.stack用于透视数据,然后通过GroupBy.cumcount透视Series.unstack

df1 = df.set_index('Date').stack().reset_index(name='val')

df = df1.set_index(['Date', df1.groupby('Date').cumcount()])['val'].unstack()
print (df)
              0    1    2    3
Date                          
01-01-2020  0.0  1.0  2.0  3.0
02-01-2020  4.0  5.0  6.0  7.0
03-01-2020  8.0  9.0  NaN  NaN

如果输出值的顺序不重要:

df1 = df.melt('Date')

df = df1.set_index(['Date', df1.groupby('Date').cumcount()])['value'].unstack()
print (df)
              0    1    2    3
Date                          
01-01-2020  0.0  2.0  1.0  3.0
02-01-2020  4.0  6.0  5.0  7.0
03-01-2020  8.0  9.0  NaN  NaN

另一个想法是使用lambda函数进行重塑:

df = (df.set_index('Date')
       .groupby(level=0)
       .apply(lambda x: pd.Series(x.to_numpy().ravel()))
       .unstack())

print (df)
              0    1    2    3
Date                          
01-01-2020  0.0  1.0  2.0  3.0
02-01-2020  4.0  5.0  6.0  7.0
03-01-2020  8.0  9.0  NaN  NaN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在第3列之后拆分一行,并将这3列作为新行传输到r

如何使用pandas.DataFrame列作为索引,列和值?

从numpy数组创建Pandas数据框,并使用数组的第一列作为索引

使用第一列作为索引将Excel转换为Pandas DataFrame

在DataFrame中添加具有相邻列数的新列作为另一列的值

pandas数据框to_dict两列作为索引,第三列作为值

Python:使用其他列将值分配给Pandas中的新列作为列表

查找重复的所有索引并将其写入新列

分割熊猫单列(字典列表)并追加为新的字典键作为新列

熊猫使用列拆分作为新索引设置索引

重塑Pandas DataFrame:将列切换为索引,并将重复值作为列

将Series作为特定索引的新列追加到DataFrame

不使用索引列作为Pandas DataFrame中的变量

使用另一列作为索引的Pandas子字符串

使用列作为列索引从R中的数据框中提取值

新列作为其他列的总和

使用Pandas将自定义系列作为新列插入DataFrame中

合并两个熊猫列作为索引,以其列名作为值创建新列

如何使用多索引df中的2行执行计算并将结果附加为新行?

使用现有的列作为索引

复制或重复列作为列

将pandas系列作为一列添加到多索引的DataFrame填充级别

使用两列作为索引来计算第三列

Excel查询以将重复的列作为记录追加到新表中

查找具有特定文本的列并使用整列作为索引匹配的范围

在 Pandas 中使用具有重复值的列作为数据框索引

使用第一列作为索引合并 2 个数据帧

删除一个特定列上的重复项并添加一个新列作为重复记录的计数 pandas

从 R 中的现有列值创建新列(使用其他列作为键)