小编jpp*_*jpp的帖子

在Pandas中有一种方法可以在dataframe.apply中使用先前的行值吗?

我有以下数据帧:

 Index_Date    A    B    C    D
 ===============================
 2015-01-31    10   10   Nan  10
 2015-02-01     2    3   Nan  22 
 2015-02-02    10   60   Nan  280
 2015-02-03    10   100   Nan  250
Run Code Online (Sandbox Code Playgroud)

要求:

 Index_Date    A    B    C    D
 ===============================
 2015-01-31    10   10   10   10
 2015-02-01     2    3   23   22
 2015-02-02    10   60   290  280
 2015-02-03    10   100  3000 250
Run Code Online (Sandbox Code Playgroud)

Column C导出用于2015-01-31通过取valueD.

然后,我需要使用valueC用于2015-01-31和乘以valueA2015-02-01添加B.

我尝试了一个apply …

python iteration for-loop dataframe pandas

60
推荐指数
5
解决办法
7万
查看次数

熊猫:在每组中按平均值填充缺失值

这应该是直截了当的,但我发现的最接近的是这篇文章: 熊猫:填写组内的缺失值,我仍然无法解决我的问题....

假设我有以下数据帧

df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 3, 1, 3, np.nan, 3], 'name': ['A','A', 'B','B','B','B', 'C','C','C']})

  name  value
0    A      1
1    A    NaN
2    B    NaN
3    B      2
4    B      3
5    B      1
6    C      3
7    C    NaN
8    C      3
Run Code Online (Sandbox Code Playgroud)

并且我想在每个"名称"组中填写"NaN",其中包含平均值

      name  value
0    A      1
1    A      1
2    B      2
3    B      2
4    B      3
5    B      1
6    C      3
7    C      3
8    C      3
Run Code Online (Sandbox Code Playgroud)

我不确定去哪里: …

python pandas imputation fillna pandas-groupby

57
推荐指数
6
解决办法
4万
查看次数

熊猫:将类别转换为数字

假设我有一个数据框,其国家/地区如下:

cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0
Run Code Online (Sandbox Code Playgroud)

我知道有一个pd.get_dummies函数可以将这些国家/地区转换为"单热编码".但是,我希望将它们转换为索引,以便我得到它cc_index = [1,2,1,3].

我假设有一种比使用get_dummies和numpy where子句更快的方法,如下所示:

[np.where(x) for x in df.cc.get_dummies().values]

使用'因子'在R中这样做有点容易,所以我希望大熊猫有类似的东西.

python series binning pandas categorical-data

51
推荐指数
4
解决办法
5万
查看次数

从Python列表中获取前n个唯一元素

我有一个python列表,其中元素可以重复.

>>> a = [1,2,2,3,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

我想n从列表中获取第一个独特的元素.所以,在这种情况下,如果我想要前5个独特元素,它们将是:

[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我已经提出了使用生成器的解决方案:

def iterate(itr, upper=5):

    count = 0
    for index, element in enumerate(itr):
        if index==0:
            count += 1
            yield element

        elif element not in itr[:index] and count<upper:
            count += 1
            yield element
Run Code Online (Sandbox Code Playgroud)

正在使用:

>>> i = iterate(a, 5)
>>> [e for e in i]
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我怀疑这是最优化的解决方案.是否有一种替代策略可以实现以更加pythonic和更有效的方式编写它?

python unique generator set python-3.x

46
推荐指数
7
解决办法
2696
查看次数

如何获取列中最常值的数字?

我有一个数据框,我想知道给定列有多少次具有最频繁的值.

我试着用以下方式做到这一点:

items_counts = df['item'].value_counts()
max_item = items_counts.max()
Run Code Online (Sandbox Code Playgroud)

结果我得到:

ValueError: cannot convert float NaN to integer
Run Code Online (Sandbox Code Playgroud)

据我所知,在第一行我得到的系列中,列的值被用作键,这些值的频率被用作值.所以,我只需要找到该系列中最大的值,并且由于某种原因,它不起作用.有谁知道如何解决这个问题?

python counter frequency series pandas

44
推荐指数
3
解决办法
6万
查看次数

将前导零添加到Pandas Dataframe中的字符串

我有一个pandas数据框,其中前3列是字符串:

         ID        text1    text 2
0       2345656     blah      blah
1          3456     blah      blah
2        541304     blah      blah        
3        201306       hi      blah        
4   12313201308    hello      blah         
Run Code Online (Sandbox Code Playgroud)

我想在ID中添加前导零:

                ID    text1    text 2
0  000000002345656     blah      blah
1  000000000003456     blah      blah
2  000000000541304     blah      blah        
3  000000000201306       hi      blah        
4  000012313201308    hello      blah 
Run Code Online (Sandbox Code Playgroud)

我试过了:

df['ID'] = df.ID.zfill(15)
df['ID'] = '{0:0>15}'.format(df['ID'])
Run Code Online (Sandbox Code Playgroud)

python string pandas

39
推荐指数
6
解决办法
4万
查看次数

在Python 3中获取第一项"OrderedDict"的最短方法

获取OrderedDictPython 3 第一项的最短方法是什么?

我最好的:

list(ordered_dict.items())[0]
Run Code Online (Sandbox Code Playgroud)

相当漫长而丑陋.

我能想到:

next(iter(ordered_dict.items()))       # Fixed, thanks Ashwini
Run Code Online (Sandbox Code Playgroud)

但它不是很自我描述.

有更好的建议吗?

python indexing iterable python-3.x

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

熊猫 - 检查所有值是否为系列中的NaN

我有一个数据系列,如下所示:

print mys

id_L1
2       NaN
3       NaN
4       NaN
5       NaN
6       NaN
7       NaN
8       NaN
Run Code Online (Sandbox Code Playgroud)

我想检查一下所有值是否为NaN.

我的尝试:

pd.isnull(mys).all()
Run Code Online (Sandbox Code Playgroud)

输出:

True
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

python null nan series pandas

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

如何从Python中的列表中获取具有相应出现次数的唯一值?

我有一个包含重复项目的列表,我想要一个具有频率的唯一项目列表.

例如,我有['a', 'a', 'b', 'b', 'b'],我想要[('a', 2), ('b', 3)].

寻找一种简单的方法来做到这一点,而不需要循环两次.

python counter list

32
推荐指数
4
解决办法
3万
查看次数

如何使用Pandas groupby在组上添加顺序计数器列

我觉得有一种比这更好的方法:

import pandas as pd
df = pd.DataFrame(
    [['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],
     ['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],
     ['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],
    columns=['c1', 'c2', 'v1'])
def callback(x):
    x['seq'] = range(1, x.shape[0] + 1)
    return x
df = df.groupby(['c1', 'c2']).apply(callback)
print df
Run Code Online (Sandbox Code Playgroud)

为达到这个:

   c1 c2  v1  seq
0   A  X   3    1
1   A  X   5    2
2   A …
Run Code Online (Sandbox Code Playgroud)

python pandas

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