我想按组计算价值变化.
这是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)
如果我能想象它也会很棒.任何建议或提示非常感谢!谢谢
我正在尝试根据下面的现有数据框创建一个新的数据框。我的目标是计算点击次数的平均变化并相应地对活动进行分类。
现有数据框 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) 我有按日期的数据,并希望按周创建一个新的数据框,其中包括销售额和类别数量.
#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 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) 考虑一个简单的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个文件; 所以上述方法需要很长时间.
谢谢
使用这个简单的代码行,我继续得到一个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的问题.
我有两个带有客户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) 使用数据框 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 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 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) pandas ×10
python ×10
group-by ×3
dataframe ×2
loops ×2
string ×2
average ×1
categories ×1
datetime ×1
header ×1
if-statement ×1
indexing ×1
numpy ×1
rename ×1
syntax-error ×1