小编Jim*_*erg的帖子

Pandas groupby 给出任何非 nan 值

我正在尝试在给定此 groupby 索引的表上执行 groupby,所有值都是正确的或 Nan。例如:

    id country    name
0    1  France    None
1    1  France  Pierre
2    2    None   Marge
3    1    None  Pierre
4    3     USA     Jim
5    3    None     Jim
6    2      UK    None
7    4   Spain  Alvaro
8    2    None   Marge
9    3    None     Jim
10   4   Spain    None
11   3    None     Jim
Run Code Online (Sandbox Code Playgroud)

我只想获取 4 个人中每个人的值,这些值不应该发生冲突,例如:

   country    name
id                
1   France  Pierre
2       UK   Marge
3      USA     Jim
4    Spain  Alvaro
Run Code Online (Sandbox Code Playgroud)

我试过了:

groupby().first()
groupby.nth(0,dropna='any'/'all')
Run Code Online (Sandbox Code Playgroud)

乃至

groupby().apply(lambda x: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

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

pandas 基于重复索引数据帧创建多个数据帧

如果我有一个在索引中有重复的数据帧,我将如何创建一组索引中没有重复的数据帧?

更准确地说,给定数据框:

   a  b
1  1  6
1  2  7
2  3  8
2  4  9
2  5  0
Run Code Online (Sandbox Code Playgroud)

我想要一个数据框列表作为输出:

   a  b
1  1  6
2  3  8


   a  b
1  2  7
2  4  9


   a  b
2  5  0
Run Code Online (Sandbox Code Playgroud)

这需要根据重复的数量根据需要扩展到尽可能多的数据帧。

python dataframe python-3.x pandas

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

在for循环中使用*args不会考虑更改变量

我有很长的循环用于重复名称,我希望通过使用函数简化事情,而不是每次都重复匹配的所有附带效果.我从以下测试用例开始,但它不像我期望的那样工作:

x, y = 0, 0
def testFunc(*args):
    global x, y
    for arg in args:
        if arg:
            x +=1
        else:
            y +=1
    return (x, y)
Run Code Online (Sandbox Code Playgroud)

当我运行它:

>>>testFunc(x==y,x==y,x==y)
(3,0)
>>>testFunc(x==y)
(3,1)
>>>testFunc(x!=y,x!=y,x!=y)
(3,4)
Run Code Online (Sandbox Code Playgroud)

基本上,在任何操作发生之前,参数似乎都会转换为布尔值.有没有办法避免这种情况?我原以为:

>>>testFunc(x==y,x==y,x==y)
(2,1)
>>>testFunc(x==y)
(2,2)
>>>testFunc(x!=y,x!=y,x!=y)
(4,3)          
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

熊猫:智能创建新列

这是一个非常笼统的问题,我正在寻求解决方案,以应对以下情况:

我经常发现自己在数据框中创建了一个额外的列,并且我想使用类似以下的内容:

df['new_col'] = df['old_col_1']+df['old_col_2']
Run Code Online (Sandbox Code Playgroud)

但是,除非操作非常简单,否则它会给出“ TypeError:无法将序列转换为[class'whatever']类”,因此我必须使用笨拙的方法。例:

df = pd.DataFrame({'Year':[2018,2017,2016,2017,2016,2018,2018],'Month':[1,1,1,2,2,2,3],
                   'Value':[521,352,32,125,662,123,621]})
Run Code Online (Sandbox Code Playgroud)

我想要一个“日期”列,并且最终这样做:

from datetime import datetime as dt
df['Date'] = None
for i in df.index:
    df1.loc[i,'Date'] = dt(df1.loc[i,'Year'],df1.loc[i,'variable'],1)
Run Code Online (Sandbox Code Playgroud)

在其他情况下,我发现自己在做:

datelist = []
for i in df.index:
    datelist.append(dt(df1.loc[i,'Year'],df1.loc[i,'variable'],1))
df['Date'] = datelist
Run Code Online (Sandbox Code Playgroud)

显然,这只是一个示例,在很多情况下,我最终都会使用这两种方法。我是否正确地认为这些方法不是pythonic的?基于其他列生成稍微复杂的列的更好方法是什么?

python-3.x pandas

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

如果术语在单元格中,则熊猫会生成“真/假”列

我有一列值以字符串形式列出,以';分隔。',我想为每个单独的值生成true / false列。该数据帧很大(100k行,13个值),我当前的代码在该数据帧中每秒大约执行1.5行。有专门的熊猫功能可以更快地做到这一点吗?还是我犯了一个明显的错误,使我的代码变慢了?

数据如下:

   id      likes colour
0   1              blue
1   2  blue; green; red
2   3       red; purple
3   4      purple; blue
4   5       yellow; red
5   6            yellow
Run Code Online (Sandbox Code Playgroud)

输出为:

   id      likes colour    red  yellow   blue  purple  green
0   1              blue  False   False   True   False  False
1   2  blue; green; red   True   False   True   False   True
2   3       red; purple   True   False  False    True  False
3   4      purple; blue  False   False   True    True  False
4   5       yellow; red   True …
Run Code Online (Sandbox Code Playgroud)

python dataframe python-3.x pandas

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

标签 统计

python-3.x ×5

pandas ×4

python ×4

dataframe ×2