[英]Adding new dataFrame column to the same dataframe in pandas
问题:收到SettingWithCopy警告。
试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] = value
目标:将列数据分成单独的列,所有列都在同一DataFrame中。
输入:具有2列的数据框。 第一列是电子邮件地址,第二列包含以分号分隔的日期列表。
码:
for dt in lunch_dates:
roulette_data[dt] = roulette_data['date'].str.contains(dt).map(bool_conversion)
我想要此代码执行的操作(并且确实如此):为原始日期列中的每个找到的日期(dt)添加一个新列。
问题:在这种情况下如何使用iloc,以确保我不在内存中的数据帧的可能副本上工作?
没有数据可以对其进行测试,我将无法对其进行测试,但是以下方法应该可以工作(将“ email_column_name”替换为email列的名称):
dates = pd.get_dummies(
roulette_data.set_index('email_column_name')['date']\
.str.split(';',expand=True)\
.stack().reset_index(level=1, drop=True)
)\
.reset_index().groupby('email_column_name').sum()
df = pd.DataFrame({'col1':['record1', 'record2'],
'col2':["this is good text", "but this is even better"]}
)
df
# col1 col2
#0 record1 this is good text
#1 record2 but this is even better
我们首先将索引设置为col1
,然后选择col2
,因此可以使用其.str.split
方法将行拆分为单个单词。
df.set_index('col1')['col2'].str.split(expand=True)
# 0 1 2 3 4
#col1
#record1 this is good text None
#record2 but this is even better
然后我们使用stack
来更改形状,并使用reset_index
摆脱不必要的索引级别
df.set_index('col1')['col2'].str.split(expand=True)\
.stack().reset_index(level=1, drop=True)
#col1
#record1 this
#record1 is
#record1 good
#record1 text
#record2 but
#record2 this
#record2 is
#record2 even
#record2 better
#dtype: object
我们将整个表达式包装在pd.get_dummies()中
pd.get_dummies(df.set_index('col1')['col2'].str.split(expand=True).stack().reset_index(level=1, drop=True))
# better but even good is text this
#col1
#record1 0 0 0 0 0 0 1
#record1 0 0 0 0 1 0 0
#record1 0 0 0 1 0 0 0
#record1 0 0 0 0 0 1 0
#record2 0 1 0 0 0 0 0
#record2 0 0 0 0 0 0 1
#record2 0 0 0 0 1 0 0
#record2 0 0 1 0 0 0 0
#record2 1 0 0 0 0 0 0
最后,我们reset_index
(这是col1
或在您的情况下,电子邮件列), groupby
的col1
在它和总和。
pd.get_dummies(
df.set_index('col1')['col2']\
.str.split(expand=True)\
.stack().reset_index(level=1, drop=True)
)\
.reset_index().groupby('col1').sum()
# better but even good is text this
#col1
#record1 0 0 0 1 1 1 1
#record2 1 1 1 0 1 0 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.