小编use*_*881的帖子

Pandas根据另一个数据框中的匹配列填充新的数据框列

我有一个df包含我的主要数据,其中有一百万rows.我的主要数据也有30个columns.现在我想在我的df被叫中添加另一列category.该categorycolumndf2其中包含约700 rows和两个其他columns将搭配2 columnsdf.

我开始设置一个indexin df2并且df将在帧之间匹配,但是其中一些indexin df2不存在df.

其余的列df2被称为AUTHOR_NAMECATEGORY.

df调用相关列AUTHOR_NAME.

一些AUTHOR_NAMEin df不存在,df2反之亦然.

我要的指令是:当indexdf同场比赛indexdf2,并titledf同场比赛titledf2,添加categorydf,否则在加的NaN category.

示例数据: …

python merge populate pandas

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

退出python上下文管理器时返回值

也许这是一个愚蠢的(实际上并不是很实际的)问题,但我问它是因为我无法绕过它.

在研究return调用上下文管理器中的语句是否会阻止__exit__被调用时(不是没有),我发现在块之间__exit__和块之间进行类比似乎很常见(例如:https:// stackoverflow .com/a/9885287/3471881)因为:finallytry/finally

def test():
    try:
        return True
    finally:
        print("Good bye")
Run Code Online (Sandbox Code Playgroud)

将执行相同的:

class MyContextManager:

    def __enter__(self):
        return self

    def __exit__(self, *args):
        print('Good bye')

def test():
    with MyContextManager():
        return True
Run Code Online (Sandbox Code Playgroud)

这真的帮助我理解cm:s是如何工作的,但是在玩了一下之后我意识到如果我们返回的东西而不是打印,这个类比就不会起作用.

def test():
    try:
        return True
    finally:
        return False
test()    
--> False
Run Code Online (Sandbox Code Playgroud)

虽然__exit__看似根本不会回归:

class MyContextManager:

    def __enter__(self):
        return self

    def __exit__(self, *args):
        return False

def test():
    with MyContextManager():
        return True

test()
--> True
Run Code Online (Sandbox Code Playgroud)

这让我想到也许你实际上不能归还任何东西__exit__,但你可以:

class MyContextManager: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

8
推荐指数
2
解决办法
728
查看次数

将查询分组到组和子组中

我想组使用SQL或R我的数据,这样我可以得到的顶部或底部10 Subarea_codes每个CompanyArea_code.从本质上说:在Subarea_codes该范围内Area_codes,每个Company都有其最大或最小的结果.

data.csv

Area_code  Subarea_code  Company   Result
10         101           A         15
10         101           P         10
10         101           C         4
10         102           A         10
10         102           P         8
10         102           C         5
11         111           A         15
11         111           P         20
11         111           C         5
11         112           A         10
11         112           P         5
11         112           C         10


result.csv should be like this

Company   Area_code  Largest_subarea_code  Result  Smallest_subarea_code    Result
A         10         101 …
Run Code Online (Sandbox Code Playgroud)

sql sqlite r greatest-n-per-group

4
推荐指数
2
解决办法
781
查看次数

在从多个数据源创建DataFrame时,我们应该使用循环或列表理解吗?

这个问题与@jpp:s在将具有类似名称约定的文件合并到数据框中的答案以及标记早期线程(将csv文件放在单独的数据帧中取决于文件名)作为重复的决定有关,因为该线程中的三个答案是要么不工作(2/3)要么不工作(1/3).

忽略那些无法解决的答案,一个答案(我的回答)据说质量很差,因为" concat在文档中明确不建议使用for循环".


批评的方法:

dataframes = {}
for filename in filenames:
    _df = pd.read_csv(filename)
    key = filename[:3]
    try:
       dataframes[key] = pd.concat([dataframes[key], _df], ignore_index=True)
    except KeyError:
       dataframes[key] = _df
Run Code Online (Sandbox Code Playgroud)

接受的方法(dd是一个字典,其中每个值是文件名列表,每个键是每个文件名的前三个字符):

dict_of_dfs
for k, v in dd.items():
    dict_of_dfs[k] = pd.concat([pd.read_csv(fn) for fn in v], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

现在我同意concat调用中的列表理解(接受的方法)比每个调用的for循环更有效.concatDataFrame

但这是否意味着我们应该总是DataFrames通过在concat调用(或append)中使用列表推导创建多个数据源,并且使用for循环是如此之以至于它实际上是错误的?可读性怎么样?我个人(当然)认为我批评的方法更具可读性.


如果我们阅读pandas文档,DataFrame.append我们就会知道for循环或列表理解都不是"推荐的生成DataFrames的方法": …

python dataframe pandas

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