[英]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.