小编Jar*_*rad的帖子

Python Pandas:按另一个合并或过滤 DataFrame。有没有更好的办法?

我有时遇到的一种情况是,我有两个数据框 ( df1, df2),我想df3基于df1和之间多列的交集创建一个新的数据框 ( ) df2

例如,我想df3通过df1按列CampaignGroup.

import pandas as pd
df1 = pd.DataFrame({'Campaign':['Campaign 1', 'Campaign 2', 'Campaign 3', 'Campaign 3', 'Campaign 4'], 'Group':['Some group', 'Arbitrary Group', 'Group 1', 'Group 2', 'Done Group'], 'Metric':[245,91,292,373,32]}, columns=['Campaign', 'Group', 'Metric'])
df2 = pd.DataFrame({'Campaign':['Campaign 3', 'Campaign 3'], 'Group':['Group 1', 'Group 2'], 'Metric':[23, 456]}, columns=['Campaign', 'Group', 'Metric'])
Run Code Online (Sandbox Code Playgroud)

df1

     Campaign            Group  Metric
0  Campaign 1       Some group     245
1  Campaign …
Run Code Online (Sandbox Code Playgroud)

python merge pandas

4
推荐指数
1
解决办法
5315
查看次数

线性编程(Simplex LP)PuLP?

仅在Python中,并使用来自Pandas数据帧的数据,我如何使用PuLP以与Excel相同的方式解决线性编程问题?应在新预算栏目下为每个渠道分配多少预算,以便最大化估算成功的总数?我真的在寻找一个使用数据框中数据的具体示例,而不是真正的高级建议.

问题数据设置

    Channel  30-day Cost  Trials  Success  Cost Min  Cost Max  New Budget
0  Channel1      1765.21    9865      812    882.61   2647.82           0
1  Channel2      2700.00   15000      900   1350.00   4050.00           0
2  Channel3      2160.00   12000      333   1080.00   3240.00           0
Run Code Online (Sandbox Code Playgroud)

这是一个最大化问题.

目标函数为:

objective_function = sum((df['New Budget']/(df['30-day Cost']/df['Trials']))*(df['Success']/df['Trials']))
Run Code Online (Sandbox Code Playgroud)

限制是:

  1. 总和df['New Budget']必须相等5000
  2. New Budget给定信道可以去不Cost Min
  3. New Budget给定信道可以走不Cost Max

有关如何使用PuLP或任何其他求解器方法转换此pandas数据帧求解器线性问题的任何想法?最终结果将是您在下图中看到的结果.

期望的结果

python linear-programming dataframe pandas pulp

4
推荐指数
1
解决办法
3470
查看次数

使用自定义 AuthenticationForm 覆盖 Django LoginView 错误消息

我有一个基于类的视图,即子类LoginView.

from django.contrib.auth.views import LoginView

class CustomLoginView(LoginView):

def get_success_url(self):
    url = self.get_redirect_url()
    return url or reverse_lazy('knowledgebase:user_home', kwargs={
        'username':self.request.user.username,
    })
Run Code Online (Sandbox Code Playgroud)

如果用户的电子邮件尚未激活,我想覆盖错误消息,因为他们必须单击发送到其电子邮件地址的链接。当前的默认消息如下所示:

覆盖LoginView错误消息

而不是说:

请输入正确的电子邮件地址和密码。两个地方都要注意大小写。

我想说一句话,大意是:

请确认您的电子邮件,以便您可以登录。

我试过:

账户/表单.py

from django.contrib.auth.forms import AuthenticationForm
from django.utils.translation import gettext as _

class PickyAuthenticationForm(AuthenticationForm):
    def confirm_login_allowed(self, user):
        if not user.is_active:
            raise forms.ValidationError(
                _("Please confirm your email so you can log in."),
                code='inactive',
            )
Run Code Online (Sandbox Code Playgroud)

账户/views.py

class CustomLoginView(LoginView): # 1. <--- note: this is a class-based view

    form_class = PickyAuthenticationForm # 2. <--- note: define form …
Run Code Online (Sandbox Code Playgroud)

forms django django-authentication loginview

4
推荐指数
1
解决办法
2758
查看次数

Python Pandas使用Dict映射将格式应用于Dataframe中的每个列

问题设置

import pandas as pd
df = pd.DataFrame(data={'Currency': {0: 111.23, 1: 321.23},
                   'Int': {0: 23, 1: 3},
                   'Rate': {0: 0.03030, 1: 0.09840}}
            )
Run Code Online (Sandbox Code Playgroud)

生成以下DataFrame

   Currency  Int    Rate
0    111.23   23  0.0303
1    321.23    3  0.0984
Run Code Online (Sandbox Code Playgroud)

我想使用如下所示的dict将非常特定的格式应用于数据框中的每一列:

format_mapping={'Currency': '${:,.2f}', 'Int': '{:,.0f}', 'Rate': '{:.2f}%'}
Run Code Online (Sandbox Code Playgroud)

我知道我可以将applymap用于多列或应用于单个列:

#All columns
df = df.applymap('{:.2f}%'.format)
#Specific columns
df['Rate'] = df['Rate'].apply('{:.2f}%'.format)
Run Code Online (Sandbox Code Playgroud)

我怎样才能通过每一列的数据帧进行迭代,并使用字典在应用格式dict keycolumnvaluestring格式化?

最终结果看起来像这样(忽略百分比现在不再乘以100的事实)

  Currency Int   Rate
0  $111.23  23  0.03%
1  $321.23   3  0.10%
Run Code Online (Sandbox Code Playgroud)

python formatting dictionary dataframe pandas

3
推荐指数
2
解决办法
8680
查看次数

Tkinter文本标记范围从开始和结束索引值从wordstart到wordend?

我试图修改由布赖恩·奥克利提供了一些惊人的代码,在一个Tkinter的文本小亮点(标签)的话在一个ButtonRelease-1事件。

我不想突出显示一个单词,而是单击一些文本,将鼠标拖到同一行的另一区域(左或右),然后突出显示该范围wordstartwordend边界的整个范围。

例如,如果在下面的代码中,单击tk之后第一行的末尾,将鼠标拖到import单词的p并释放鼠标按钮,我希望标签扩展以捕获从到的整个范围。1.01.20

下面的代码使用两个tk.StringVar捕获开始和结束字符串,但是从获得的两个索引中,我将如何将这些开始和结束点应用于范围,然后展开以突出显示到wordstartand wordend范围?

import tkinter as tk

class Example(tk.Frame):
  def __init__(self, parent):
    tk.Frame.__init__(self, parent)
    self.text = tk.Text(self, wrap="none")
    self.text.pack(fill="both", expand=True)
    self.start = tk.StringVar()
    self.end = tk.StringVar()

    self.text.bind("<Button-1>", self.button_down)
    self.text.bind("<ButtonRelease-1>", self.button_up)
    #self.text.bind("<B1-Motion>", self._on_click)
    self.text.tag_configure("highlight", background="green", foreground="black")

    with open(__file__, "rU") as f:
      data = f.read()
      self.text.insert("1.0", data)

  def button_down(self, event):
    self.start.set(self.text.index('@%s,%s' % (event.x, event.y)))
    print(self.start.get())

  def button_up(self, event):
    self.end.set(self.text.index('@%s,%s' …
Run Code Online (Sandbox Code Playgroud)

python tags text bind tkinter

3
推荐指数
1
解决办法
640
查看次数

熊猫read_csv不服从正则表达式sep

资料

from io import StringIO
import pandas as pd

s = '''ID,Level,QID,Text,ResponseID,responseText,date_key,last
375280046,S,D3M,Which is your favorite?,D5M0,option 1,2012-08-08 00:00:00,ynot
375280046,S,D3M,How often? (at home, at work, other),D3M0,Work,2010-03-31 00:00:00,okkk
375280046,M,A78,Do you prefer a, b, or c?,A78C,a,2010-03-31 00:00:00,abc
376918925,M,A78,Which ONE (select only one),A78E,Milk,2004-02-02 00:00:00,launch Wed., '''

df = pd.read_csv(StringIO(s), sep=r',(?!\s)')
Run Code Online (Sandbox Code Playgroud)

问题:我在这里问了一个问题。我遇到了一个新问题。请注意,在最后一行的末尾,这是一个逗号和一个空格。正则表达式sep=r',(?!\s)'应该忽略逗号后跟一个空格。

问题:是否有一种方法可以按字面意义读取最后一列,launch Wed.,其中逗号不是分隔符/定界符,而实际上是last列文本中的逗号- pd.read_csv仅使用?

错误

ValueError: Expected 8 fields in line 5, saw 9. Error could possibly be due to quotes …
Run Code Online (Sandbox Code Playgroud)

python csv pandas

3
推荐指数
1
解决办法
3268
查看次数

Python Pandas Dataframe 条件 If、Elif、Else

在 Python Pandas 中DataFrame,如果“搜索词”列包含来自连接的管道分隔列表中的任何可能的字符串,我将尝试将特定标签应用于行。如何使用 Pandas 执行条件 if、elif、else 语句?

例如:

df = pd.DataFrame({'Search term': pd.Series(['awesomebrand inc', 'guy boots', 'ectoplasm'])})

brand_terms = ['awesomebrand', 'awesome brand']
footwear_terms = ['shoes', 'boots', 'sandals']

#Note: this does not work
if df['Search term'].str.contains('|'.join(brand_terms)):
  df['Label'] = 'Brand'
elif df['Search term'].str.contains('|'.join(footwear_terms)):
  df['Label'] = 'Footwear'
else:
  df['Label'] = '--'
Run Code Online (Sandbox Code Playgroud)

所需输出示例:

Search Term          Label
awesomebrand inc     Brand
guy boots            Footwear
ectoplasm            --
Run Code Online (Sandbox Code Playgroud)

我尝试附加.any()到语句的末尾contains(),但它将Brand标签应用到每一行。

我遇到的大多数示例都是比较列值是否==等于(不是我想要的)或正在执行数字比较,而不是文本字符串比较。

python if-statement dataframe pandas

2
推荐指数
1
解决办法
5187
查看次数

Python Pandas将日期和小时合并为一列

我如何将Day(datetime64 [ns])和Hour(int64)组合成一个日期时间列?

         Day  Hour
0 2010-04-24    17
1 2012-08-20    10
2 2016-03-06     9
3 2016-01-02    10
4 2010-12-21     4
Run Code Online (Sandbox Code Playgroud)

python datetime pandas

2
推荐指数
1
解决办法
2047
查看次数

为什么这个Python"any"函数不返回True?

我不明白为什么任何()没有按照我期望的方式工作.下面,我想说,如果城市列表中的任何城市都在短语.split()中,则返回True.但是为什么当phrase.split()['replacement', 'windows', 'in', 'seattle', 'wa']和'seattle'显然在短语.split()列表中时它返回false ?

>>> cities = ['seattle', 'san antonio', 'denver']
>>> phrase = 'replacement windows in seattle wa'
>>> any(cities) in phrase.split()
False
>>> 'seattle' in phrase.split()
True
Run Code Online (Sandbox Code Playgroud)

python string any python-3.x

1
推荐指数
1
解决办法
986
查看次数

Python Pandas DataFrame 按周一至周日的每周定义将每日数据重新采样到每周?

import pandas as pd
import numpy as np

dates = pd.date_range('20141229',periods=14, name='Day')
df = pd.DataFrame({'Sum1': [1667, 1229, 1360, 9232, 8866, 4083, 3671, 10085, 10005, 8730, 10056, 10176, 3792, 3518],
                   'Sum2': [91, 75, 75, 254, 239, 108, 99, 259, 395, 355, 332, 386, 96, 111],
                   'Sum3': [365.95, 398.97, 285.12, 992.17, 1116.57, 512.11, 504.47, 1190.96, 1753.6, 1646.25, 1344.05, 1582.67, 560.95, 736.44],
                   'Sum4': [5, 5, 1, 5, 8, 8, 2, 10, 12, 16, 16, 6, 6, 3]},index=dates); print(df)
Run Code Online (Sandbox Code Playgroud)

df制作这个样子的:

             Sum1  Sum2 …
Run Code Online (Sandbox Code Playgroud)

python resampling dataframe pandas

1
推荐指数
2
解决办法
1万
查看次数

从 sklearn RandomForestClassifier 制作 graphviz(而不是来自单个 clf.estimators_)

Python。学习。RandomForestClassifier. 拟合后RandomForestClassifier,它是否会产生某种可用于创建图形可视化的单一“最佳”“平均”共识树?

是的,我查看了文档。不,它什么也没说。NoRandomForestClassifier没有tree_属性。但是,您可以从中获取森林中的个别树木,clf.estimators_因此我知道我可以从其中之一制作图形。这里有一个例子。我什至可以给所有的树打分,然后在森林中找到得分最高的树,然后选择那一棵树……但这不是我要问的。

我想根据“平均”最终随机森林分类器结果制作图形。这可能吗?或者,最终分类器是否使用底层树来生成分数和预测?

python graphviz decision-tree random-forest scikit-learn

1
推荐指数
1
解决办法
2398
查看次数