Python 熊猫-创建新列-如果列表中有其他列值(正确方式)

Python 熊猫-创建新列-如果列表中有其他列值(正确方式),python,pandas,Python,Pandas,我一直在努力根据“一周中的哪一天”专栏制作一个新专栏,说明周末与否。我使用的代码是基于前面的堆栈溢出问题 weekday_classification = { 'Weekday': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'], 'Weekend': ['Saturday', 'Sunday'] } weekday_classification = {day: all_days for all_days,

我一直在努力根据“一周中的哪一天”专栏制作一个新专栏,说明周末与否。我使用的代码是基于前面的堆栈溢出问题

weekday_classification = {
    'Weekday': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
    'Weekend': ['Saturday', 'Sunday']
    }
weekday_classification = {day: all_days for all_days, l in weekday_classification.items() for day in l}
df["Weekend"] = df['Day of Week'].map(weekday_classification)
df.head()
尽管上面的代码产生了预期的效果,但我收到了一条警告,其中指出:

ipython-input-21-e273917f31f9:6:设置为复制警告:值为 试图在数据帧的切片副本上设置。试用 .loc[行索引器,列索引器]=改为值

如何解决这个问题,我已经阅读了说明如何创建新专栏的文档,然而这似乎只是针对更简单的专栏创作


我仍然只是在用Python和数据分析,我很高兴收到一般性的反馈。

把字典翻过来,就是这样

weekday_classification = {
                            'Monday': 'Weekday',
                            'Tuesday': 'Weekday',
                            'Wednesday': 'Weekday',
                            'Thursday': 'Weekday',
                            'Friday': 'Weekday',
                            'Saturday': 'Weekend',
                            'Sunday': 'Weekend'
                         }
然后基于该
weekend\u分类构建一个新的数据帧,以与现有的
df

In []: days = pd.DataFrame(data=weekday_classification.values(), index=weekday_classification.keys(), columns=['Weekday/end'])
       days
Out[]:
                Weekday/end
        Monday      Weekday
       Tuesday      Weekday
     Wednesday      Weekday
      Thursday      Weekday
        Friday      Weekday
      Saturday      Weekend
        Sunday      Weekend

In []: df.join(days, on=df['Day of Week'])
Out[]:
        Day of Week     Weekday/end
    0        Monday         Weekday
    1       Tuesday         Weekday
    2     Wednesday         Weekday
    3      Thursday         Weekday
    4        Friday         Weekday
    5      Saturday         Weekend
    6        Sunday         Weekend

把你的字典翻过来,就是这样

weekday_classification = {
                            'Monday': 'Weekday',
                            'Tuesday': 'Weekday',
                            'Wednesday': 'Weekday',
                            'Thursday': 'Weekday',
                            'Friday': 'Weekday',
                            'Saturday': 'Weekend',
                            'Sunday': 'Weekend'
                         }
然后基于该
weekend\u分类构建一个新的数据帧,以与现有的
df

In []: days = pd.DataFrame(data=weekday_classification.values(), index=weekday_classification.keys(), columns=['Weekday/end'])
       days
Out[]:
                Weekday/end
        Monday      Weekday
       Tuesday      Weekday
     Wednesday      Weekday
      Thursday      Weekday
        Friday      Weekday
      Saturday      Weekend
        Sunday      Weekend

In []: df.join(days, on=df['Day of Week'])
Out[]:
        Day of Week     Weekday/end
    0        Monday         Weekday
    1       Tuesday         Weekday
    2     Wednesday         Weekday
    3      Thursday         Weekday
    4        Friday         Weekday
    5      Saturday         Weekend
    6        Sunday         Weekend

因为您的
df
是另一个数据帧的“子集”。您可能已经对另一个数据帧的列进行了一些过滤,以生成此
df
,如:

df = df_p[df_p['some_col'].isin(some_set)]
熊猫可以简单地创建对
df\u p
部分的引用来表示
df
,而不是实际创建
df
。在这种情况下,
df
将像
df\u p
的一片,修改
df
将导致警告,因为这可能会影响
df\u p
。这就是错误消息所描述的。 创建
df
时,确保
df
有自己的数据。对其他数据帧执行过滤,如:

df = df_p[df_p['some_col'].isin(some_set)].copy()

或者对复杂数据使用copy.deepcopy()。

因为您的
df
是另一个数据帧的“子集”。您可能已经对另一个数据帧的列进行了一些过滤,以生成此
df
,如:

df = df_p[df_p['some_col'].isin(some_set)]
熊猫可以简单地创建对
df\u p
部分的引用来表示
df
,而不是实际创建
df
。在这种情况下,
df
将像
df\u p
的一片,修改
df
将导致警告,因为这可能会影响
df\u p
。这就是错误消息所描述的。 创建
df
时,确保
df
有自己的数据。对其他数据帧执行过滤,如:

df = df_p[df_p['some_col'].isin(some_set)].copy()

或者对复杂数据使用copy.deepcopy()。

这是否回答了您的问题?这回答了你的问题吗?这回答了你的问题吗?这回答了你的问题吗?非常感谢您的见解。你完全正确-我在我的笔记本上面创建了一个子集。我会记住继续使用copy()。非常感谢您的见解。你完全正确-我在我的笔记本上面创建了一个子集。我会记住继续使用copy()。哇,我需要研究。加入比直接创建专栏更多的内容。非常感谢你这么做。它就像一个符咒。谢谢你的帮助!哇,我需要研究。加入比直接创建专栏更多的内容。非常感谢你这么做。它就像一个符咒。谢谢你的帮助!