python - 将新的数据框列添加到熊猫中的同一数据框
问题描述
问题:收到 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'):
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
推荐阅读
- r - 尝试在 R 中加载 LAS 文件
- python - Python:如何将多个 html 文件的内容保存到 html 链接中,从
tag?</h1> <div id="body"><p>I have a Python code that works fine for parsing some data on html files. At the end of the code I must save the html files by tag. For example, I have this 3 html - ios15 - Xcode 13,iOS 15 签名和过期帐户的问题,任何连接?
- python - 使用 3D 绘图沿 y 轴绘制直线
- reactjs - 为什么我的引导模式没有显示正确的信息?
- javascript - 函数声明如何影响提升?
- python - 解析 YAML 文件中的单个密钥
- arangodb - 在 arangodb 中存储日期的最佳方法
- google-apps-script - 3Commas API 和谷歌电子表格
- node.js - 如何使用 node_mailer 发送 gzip 文件