如何从熊猫数据框中的列中的每一行中删除重复值

拉里·弗洛雷斯

我遇到了一个问题,如果两者中都有重复的日期,date_x并且date_yHoliday 列的输出似乎为具有相同确切日期的行的每次出现添加了一个假日实例。下面是我使用的小样本数据集来说明我的问题的代码。

from pandas.tseries.holiday import USFederalHolidayCalendar
from datetime import datetime
import pandas as pd

cal = USFederalHolidayCalendar()
holidays = (pd.DataFrame(cal.holidays(return_name=True), columns=['Holiday'])
            .reset_index()
            .rename({'index': 'Date'}, axis=1))
holidays['Date'] = pd.to_datetime(holidays['Date'])
df= pd.DataFrame({'Date_x': {0: '2020-12-22', 1: '2020-06-20', 2: '2020-02-11', 3: '2020-05-22', 4: '2020-12-22', 5: '2020-12-20', 6: '2020-12-20', 7: '2020-12-22'},
                  'Date_y': {0: '2021-01-01', 1: '2020-07-11', 2: '2020-03-27', 3: '2020-06-27', 4: '2021-01-01', 5: '2020-12-26', 6: '2020-12-27', 7: '2021-01-01'}})
df['Date_x'] = pd.to_datetime(df['Date_x'])
df['Date_y'] = pd.to_datetime(df['Date_y'])

Y = 2000 # dummy leap year to allow input X-02-29 (leap day)
seasons = [('Winter', (date(Y,  1,  1),  date(Y,  3, 20))),
           ('Spring', (date(Y,  3, 21),  date(Y,  6, 20))),
           ('Summer', (date(Y,  6, 21),  date(Y,  9, 22))),
           ('Fall', (date(Y,  9, 23),  date(Y, 12, 20))),
           ('Winter', (date(Y, 12, 21),  date(Y, 12, 31)))]

def get_season(x):
    x = x.replace(year=Y)
    return next(season for season, (start, end) in seasons
                if start <= x <= end)


def get_holiday():
    return pd.DataFrame([(h,y,z) for (h,d) in zip(holidays['Holiday'], holidays['Date'])
     for (y, z) in zip(df['Date_x'], df['Date_y']) if y.date() <= d.date() if d.date() <= z.date()], columns=['Holiday', 'Date_x', 'Date_y'])


s1 = df['Date_x'].apply(lambda x: get_season(x))
s2 = df['Date_y'].apply(lambda x: get_season(x))
df['Season']= [', '.join(list(set([x,y]))) for (x,y) in zip(s1,s2)]
dft = get_holiday()
dft = dft.groupby(['Date_x', 'Date_y'])['Holiday'].apply(lambda x: ', '.join(list(x)))
df = pd.merge(df, dft, how='left', on=['Date_x', 'Date_y'])

所以运行上面的代码我得到这个输出:

错误的输出 我不希望每个字段中所有这些重复的假日值,我的实际文件会变得更糟,我也会在这里添加那个 csv,以防万一。

是我正在使用的全套数据的谷歌表格链接。

亚维夫亚尼夫

改变:

dft = dft.groupby(['Date_x', 'Date_y'])['Holiday'].apply(lambda x: ', '.join(list(x)))

到:

dft = dft.groupby(['Date_x', 'Date_y'])['Holiday'].apply(lambda x: ', '.join(set(x)))

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除熊猫数据框中的每一行?

删除一行熊猫数据框中的重复值

熊猫数据框中每一行的随机值

如何在pytorch中对矩阵的每一行中的值进行重复数据删除?

如何获取数据框中每一行的每一列的值和类型?

如何将熊猫数据框中的每一行乘以不同的值

如何返回与熊猫数据框中的每一行都符合条件的列标题?

删除数据框中每一行列中字符串中的重复单词

如何删除熊猫数据框中的唯一行

如何从熊猫数据框中删除一行?

删除熊猫数据框中每一行的最后一个词

如何使数据框中的每一行的每一列都有一个值?

删除熊猫数据框中每一行的标点符号

熊猫-删除每列中的重复值

访问每一行并检查数据框中的每一列值

如何为熊猫数据框中的另一列中的特定值更新一行中的列值?

为熊猫数据框的每一行替换一列中的字符串

熊猫数据框,如何在一行中设置多个列值?

比较其他熊猫数据框的每一行中的值

获取熊猫数据框中每一行的最高日期值

熊猫数据框中每一行的最小值

如何在不迭代每一行的情况下访问熊猫数据框中的值

根据另一列中的值选择列的值,然后在熊猫数据框中的每一行应用该值

如何减少数据框中每一行中的列表中的某些值

组中每一行的熊猫条件列值

为熊猫数据框中的每一行选择切片/列范围

如何转换在每一列的每一行中包含列表的数据框

如何检查熊猫数据框中的datetime列是否属于每一行相同的日期?

如何检查r中数据框中的一列值是否对应于数据框中每一行的另一列?