pandas 合并多列中包含重复值的不同时间序列

nhn9ugyo  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(43)

我有一个数据集,其结构如下

date1     header1  date2     header2  date3     header3  ... 
11.12.23  100      11.12.23  90       08.12.23  95       ...
11.12.23  100      08.12.23  89       08.12.23  95       ...
08.12.23  95       08.12.23  89       07.12.23  93       ...

字符串
我想删除每个时间序列的重复值([date 1,header 1]; [date 2,header 2]等)。然后,我想按日期合并不同的时间序列作为索引。结果数据集应具有以下结构

date      header1  header2  header3  ... 
11.12.23  100      90       NA       ...
08.12.23  95       89       95       ...
07.12.23  NA       NA       93       ...


你有任何想法如何使用python/pandas实现这一点吗?谢谢。
编辑:我刚刚发现header 3的值中有一个错误,现在已经纠正了。

mbskvtky

mbskvtky1#

另一种可能的解决方案,使用list comprehensiondrop_duplicatespandas.concat

n = 3 # number of column pairs

pd.concat([df.iloc[:, i:(i+2):1].drop_duplicates()
           .rename(columns={df.columns[i]: 'Date'}).set_index('Date')
           for i in range(0, 2*n, 2)], axis=1).reset_index()

字符串
输出量:

Date  header1  header2  header3
0  11.12.23    100.0     90.0      NaN
1  08.12.23     95.0     89.0     95.0
2  07.12.23      NaN      NaN     93.0

kuhbmx9i

kuhbmx9i2#

可以使用wide_to_longdrop_duplicatesunstack

(pd.wide_to_long(df.reset_index(), i='index', j='j', stubnames=['date', 'header'])
   .drop_duplicates(keep='last').droplevel('index')
   .set_index('date', append=True)['header'].unstack('j')
   .add_prefix('header').rename_axis(columns=None)
)

字符串
如果你想删除基于日期/标题/值的重复项:

(pd.wide_to_long(df.reset_index(), i='index', j='j',
                 stubnames=['date', 'header'])
   .reset_index('j')
   .drop_duplicates()
   .set_index(['date', 'j'])['header'].unstack('j')
   .add_prefix('header').rename_axis(columns=None)
)


输出量:

header1  header2  header3
date                               
07.12.23      NaN      NaN     93.0
08.12.23      NaN     89.0     95.0
11.12.23    100.0     90.0      NaN

相关问题