小编jea*_*elj的帖子

python pandas groupby计算变化

我想按组计算价值变化.

这是python pandas dataframe df我有:

Group |   Date      | Value
  A     01-02-2016     16 
  A     01-03-2016     15 
  A     01-04-2016     14 
  A     01-05-2016     17 
  A     01-06-2016     19 
  A     01-07-2016     20 
  B     01-02-2016     16 
  B     01-03-2016     13 
  B     01-04-2016     13 
  C     01-02-2016     16 
  C     01-03-2016     16 
Run Code Online (Sandbox Code Playgroud)

我想计算一下,对于A组,值正在上升,对于B组他们正在下降而对于C组他们没有变化.

我不确定如何处理它,因为在A组中,值最初会减少然后增加.那么我应该看看平均变化或最近的变化?

我应该使用pct_change吗?http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pct_change.html我不知道如何指定时间帧.

df.groupby.pct_change
Run Code Online (Sandbox Code Playgroud)

如果我能想象它也会很棒.任何建议或提示非常感谢!谢谢

python group-by pandas pandas-groupby

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

按组查看趋势变化(python pandas dataframe)

我正在尝试根据下面的现有数据框创建一个新的数据框。我的目标是计算点击次数的平均变化并相应地对活动进行分类。

现有数据框 df:

campaign    |     date     |    clicks 
   A           2015-10-11       255
   A           2015-10-12       367
   A           2015-10-13       489
   B           2015-10-11       500
   B           2015-10-15       122
   C           2015-10-11       33
Run Code Online (Sandbox Code Playgroud)

目标数据框 df_categorized:

campaign | avg_change |   category
   A        0.3858       increasing
   B        -0.756       decreasing
   C           0         no change
Run Code Online (Sandbox Code Playgroud)

我尝试了这段代码,但收到错误消息 TypeError: 'long' object does not support item assignment

 #standard packages
 import pandas as pd
 import numpy as np

 #upload data into df
 df = pd.read_csv('C:\Users\xxx\Documents\\ad_table.csv')

 df.head()
 campaign    |     date     |    clicks 
   A           2015-10-11       255
   A           2015-10-12 …
Run Code Online (Sandbox Code Playgroud)

python loops categories pandas

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

python pandas resample count和sum

我有按日期的数据,并希望按周创建一个新的数据框,其中包括销售额和类别数量.

#standard packages
import numpy as np
import pandas as pd

#visualization
%matplotlib inline
import matplotlib.pylab as plt

#create weekly datetime index
edf = pd.read_csv('C:\Users\j~\raw.csv', parse_dates=[6])
edf2 = edf[['DATESENT','Sales','Category']].copy()
edf2

#output

DATESENT    |  SALES  | CATEGORY
2014-01-04      100        A
2014-01-05      150        B
2014-01-07      150        C
2014-01-10      175        D

#create datetime index of week
edf2['DATESENT']=pd.to_datetime(edf2['DATESENT'],format='%m/%d/%Y')
edf2 = edf2.set_index(pd.DatetimeIndex(edf2['DATESENT']))
edf2.resample('w').sum()
edf2

#output

            SALES CATEGORY 
DATESENT     
2014-01-05  250      AB
2014-01-12  325      CD
Run Code Online (Sandbox Code Playgroud)

但我在寻找

           SALES CATEGORY 
DATESENT     
2014-01-05  250      2
2014-01-12  325      2
Run Code Online (Sandbox Code Playgroud)

这不起作用...... …

python indexing datetime pandas

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

python pandas 如果列字符串包含单词标志

我想向我的 python pandas dataframe df 添加一个标志,如果列中的条目Title包含单词test(大写或小写或全部大写),我想添加T一个新列test

这给了我一个错误,并且没有考虑所有大写场景:

df['Test_Flag'] = np.where(df[df['Title'].str.contains("test|Test")==True], 'T', '')

ValueError: Length of values does not match length of index
Run Code Online (Sandbox Code Playgroud)

python string numpy pandas

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

python pandas以相同的方式重命名多个列标题

考虑一个简单的df:

HeaderA | HeaderB | HeaderC 
    476      4365      457
Run Code Online (Sandbox Code Playgroud)

有没有办法重命名所有列,例如最后添加到所有列的"X"?

HeaderAX | HeaderBX | HeaderCX 
    476      4365      457
Run Code Online (Sandbox Code Playgroud)

我正在连接多个数据帧,并希望根据它们来自哪个数据集轻松区分列.

或者这是唯一的方法吗?

df.rename(columns={'HeaderA': 'HeaderAX'}, inplace=True)
Run Code Online (Sandbox Code Playgroud)

我有超过50个列标题和10个文件; 所以上述方法需要很长时间.

谢谢

python rename header pandas

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

python astype(str)给出了SettingWithCopyWarning和请求我使用loc

使用这个简单的代码行,我继续得到一个SettingWithCopyWarning错误,而不是通过我的整个代码.

#make email a string
df['Email Address'] = df['Email Address'].astype(str)

C:\Users\xxx\AppData\Local\Continuum\Anaconda2\lib\site-packages\ipykernel\__main__.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  from ipykernel import kernelapp as app
Run Code Online (Sandbox Code Playgroud)

我浏览了文档,但无法使用loc.下面的代码是错误的.

df.loc['Email Address'] = df.loc['Email Address'].astype(str)
Run Code Online (Sandbox Code Playgroud)

请原谅这是一个重复的问题 - 我在stackoverflow上搜索它,但找不到一个解决loc和astype的问题.

python type-conversion syntax-error pandas

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

如果ID存在于其他数据帧中,则Python Pandas数据帧会在新列中添加"1"

我有两个带有客户ID的数据框(标记为"C_ID")以及一年的访问次数.

如果客户也在2009年购物,我想在我的2010数据框中添加一列.所以我需要创建一个循环来检查2010年的C_ID是否存在于2009年,添加1,否则为0.

我使用此代码并没有工作:(没有错误消息,没有任何反应)

for row in df_2010.iterrows():
    #check if C_ID exists in the other dataframe
    check = df_2009[(df_2009['C_ID'] == row['C_ID'])]

    if check.empty:
        #ID not exist in 2009 file, add 0 in new column
        row['shopped2009'] = 0

    else:
        #ID exists in 2009 file, add 1 into same column
        row['shopped2009'] = 1
Run Code Online (Sandbox Code Playgroud)

python loops dataframe pandas

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

Python Pandas:AttributeError:'str'对象没有属性'loc'

使用数据框 df:

Count
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

想要添加第二列,将 3 以上的所有内容归类为“4+” - 需要的输出:

Count | Category
1        1
2        2
3        3
4        4+
5        4+
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

df['Category'] = df['Count']
df = df.loc[df['Count'] > 3, 'Category'] = '4+'
Run Code Online (Sandbox Code Playgroud)

我得到这个错误:

AttributeError: 'str' object has no attribute 'loc'
Run Code Online (Sandbox Code Playgroud)

python string error-handling pandas

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

Python Pandas计算日期之间的平均天数

使用以下python pandas dataframe df:

Customer_ID | Transaction_ID
ABC            2016-05-06-1234
ABC            2017-06-08-3456
ABC            2017-07-12-5678
ABC            2017-12-20-6789
BCD            2016-08-23-7891
BCD            2016-09-21-2345
BCD            2017-10-23-4567
Run Code Online (Sandbox Code Playgroud)

不幸的是,日期隐藏在transaction_id字符串中。我以这种方式编辑了数据框。

#year of transaction
df['year'] = df['Transaction_ID'].astype(str).str[:4]

#date of transaction
df['date'] = df['Transaction_ID'].astype(str).str[:10]

#format date
df['date']=pd.to_datetime(df['date'], format='%Y-%m-%d')

#calculate visit number per year
df['visit_nr_yr'] = df.groupby(['Customer_ID', 'year']).cumcount()+1
Run Code Online (Sandbox Code Playgroud)

现在,df如下所示:

Customer_ID | Transaction_ID    | year  | date        |visit_nr_yr 
ABC            2016-05-06-1234    2016    2016-05-06    1            
ABC            2017-06-08-3456    2017    2017-06-08    1            
ABC            2017-07-12-5678    2017    2017-07-12    2            
ABC            2017-12-20-6789    2017    2017-12-20    3            
BCD            2016-08-23-7891    2016    2016-08-23 …
Run Code Online (Sandbox Code Playgroud)

python if-statement group-by average pandas

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

根据另一列中的日期和标志过滤掉行

使用python pandas DataFrame df:

Customer | date_transaction_id    | first_flag | dollars
ABC        2015-10-11-123              Y         100
BCD        2015-03-05-872              N         150
BCD        2015-01-01-923              N         -300
ABC        2015-04-04-910              N         -100
ABC        2015-12-12-765              N         -100
Run Code Online (Sandbox Code Playgroud)

上述客户ABC在4月份归还了房产,然后在11月买了一些东西.在我的分析中,我需要开始计算他们的第一个正面交易作为他们与公司的第一笔交易.如何排除客户ABC的第一笔交易?请注意,客户端BCD不是新客户端,因此不应排除任何行.

那么如何在first_flagY 之前排除日期的交易呢?

首先,我从date_transaction_id中获取日期并将其格式化为日期字段.

df['date'] = df['date_transaction_id'].astype(str).str[:10]
df['date']= pd.to_datetime(df['date'], format='%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

然后我会按客户和日期排序

df = df.sort_values(['Customer', 'date'], ascending=[True, False])
Run Code Online (Sandbox Code Playgroud)

但是现在我被卡住了,如何在客户端删除带有first_flagY 之前的日期的行.请注意,在标记为Y的事务之前,客户端可以有一个,没有或多个事务.

这是我要找的输出:

Customer | date       | first_flag | dollars
ABC        2015-10-11      Y         100
ABC        2015-12-12      N         -100
BCD        2015-01-01      N         -300
BCD        2015-03-05      N         150
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

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