我有一个pandas数据框,其中包含如下所示的数据:
ID year_month_id Class
1 201612 A
2 201612 D
3 201612 B
4 201612 Other
5 201612 Other
6 201612 Other
7 201612 A
8 201612 Other
9 201612 A
1 201701 B
Run Code Online (Sandbox Code Playgroud)
因此,ID可以在特定月份的任何课程中,下个月他的课程可能会发生变化.现在我要做的是为每个ID获取它在特定类下的月数以及它所属的最新类.如下所示:
ID Class_A Class_B Class_D Other Latest_Class
1 2 3 4 0 B
2 12 0 0 0 D
Run Code Online (Sandbox Code Playgroud)
我如何在python中实现这一点.有人可以帮我这个吗?此外,由于真实数据集很大并且无法手动验证,我如何才能获得超过1类的ID列表?
我试图将我的数据框从我有一个带有分类变量的列的长格式转换为宽格式,其中每个类别都有自己的价格列。目前,我的数据如下所示:
date-time date vendor payment_type price
03-10-15 10:00:00 03-10-15 A1 1 50
03-10-15 10:00:00 03-10-15 A1 2 60
03-10-15 10:00:00 03-11-15 A1 1 45
03-10-15 10:00:00 03-11-15 A1 2 70
03-10-15 10:00:00 03-12-15 B1 1 40
03-10-15 10:00:00 03-12-15 B1 2 45
03-10-15 10:00:00 03-10-15 C1 1 60
03-10-15 10:00:00 03-10-15 C1 1 65
Run Code Online (Sandbox Code Playgroud)
我的目标是为每个供应商的价格和每种付款类型设置一列,每天一行。当每天有多个值时,我想使用最大值。最终结果应该是这样的。
Date A1_Pay1 A2_Pay2 ... C1_Pay1 C1_Pay2
03-10-15 50 60 ... 65 NaN
03-11-15 45 70 ... NaN NaN
03-12-15 NaN NaN ... NaN NaN
Run Code Online (Sandbox Code Playgroud)
我尝试使用 …
为超级新手问题提前道歉.
我正在学习使用pandas,并且有这个简单的操作,我无法弄清楚如何执行:
我有以下数据框:
print df
Out[19]:
USERNAME REQUEST_TYPE STATUS LATENCY
0 foo 1 SUCCESS 7
1 foo 2 SUCCESS 17
2 bar 1 SUCCESS 10
3 bar 2 FAILURE 12
Run Code Online (Sandbox Code Playgroud)
我希望每个USERNAME都有一行,这是每个REQUEST_TYPE的STATUS和LATENCY列的串联.输出应如下所示:
USERNAME STATUS_1 LATENCY_1 STATUS_2 LATENCY_2
0 foo SUCCESS 7 SUCCESS 17
1 bar SUCCESS 10 FAILURE 12
Run Code Online (Sandbox Code Playgroud)
我想到了以pandas.groupby(df,['USERNAME','REQUEST_TYPE'])开头的东西,但我不知道如何连接回来的行,以及是否有任何方法可以创建新的列名.
谢谢!
假设我有一个DataFrame:
term score
0 this 0
1 that 1
2 the other 3
3 something 2
4 anything 1
5 the other 2
6 that 2
7 this 0
8 something 1
Run Code Online (Sandbox Code Playgroud)
我如何通过score列中的唯一值来计算term列中的实例?产生如下结果:
term score 0 score 1 score 2 score 3
0 this 2 0 0 0
1 that 0 1 1 0
2 the other 0 0 1 1
3 something 0 1 1 0
4 anything 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
我在这里读到的相关问题包括Python Pandas计算和总结特定条件, …
我在与熊猫转置时遇到困难。
我有以下df:
date name quantity
1/1/2018 A 5
1/1/2018 B 6
1/1/2018 C 7
1/2/2018 A 9
1/2/2018 B 8
1/2/2018 C 6
Run Code Online (Sandbox Code Playgroud)
我最终希望为每个日期的所有名称及其数量创建成对关联。为此,我正在尝试首先从此df创建以下输出:
date A B C
1/1/2018 5 6 7
1/2/2018 9 8 6
Run Code Online (Sandbox Code Playgroud)
转置对我来说很难,因为我可以获得重复的列标题,但是我也不想通过先删除它们而丢失任何数据。我觉得答案可能是我没有真正使用的panda实用程序,我可能正在转置上进行隧道传输...
我有一个这样的数据框:
name vals
0 foo X
1 foo Y
2 foo Z
3 bar Y
4 bar Z
5 bar Q
Run Code Online (Sandbox Code Playgroud)
我怎样才能把它变成这样:
Q X Y Z
name
foo 0 1 1 1
bar 1 0 1 1
Run Code Online (Sandbox Code Playgroud)
第一个 df 的代码:
df = pd.DataFrame({"name": ["foo", "foo", "foo",
"bar", "bar", "bar"],
"vals": ["X", "Y", "Z",
"Y", "Z", "Q"],
})
Run Code Online (Sandbox Code Playgroud) 我正在尝试在熊猫中创建交叉表/数据透视表:
import pandas as pd
import numpy as np
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two','two'],'bar': ['A', 'A', 'C', 'B', 'B', 'C']})
Run Code Online (Sandbox Code Playgroud)
但是我的尝试是:
pd.pivot(df, index='foo', columns='bar')
Run Code Online (Sandbox Code Playgroud)
TypeError:pivot_simple()为参数“ index”获得了多个值
第二个:
pd.pivot_table(data = df, values = 'bar', index = 'bar', columns = 'foo', aggfunc=lambda x: np.count_nonzero(x))
foo one two
bar
A 4.0 NaN
B NaN 4.0
C 2.0 2.0
Run Code Online (Sandbox Code Playgroud)
我想要实现的输出如下:
A B C
one 2 1
two 2 1
Run Code Online (Sandbox Code Playgroud) 我有这个数据帧:
+-------+-----+---------+
| group | id | value |
+-------+-----+---------+
| A | 92 | 123.123 |
| A | 105 | 9034 |
| A | 999 | 421 |
| B | 92 | 32019 |
| B | 105 | 3281 |
+-------+-----+---------+
Run Code Online (Sandbox Code Playgroud)
我想转动'group'列,使其值成为'value'列名称的一部分,观察结果由'id'连接,如下所示:
+-----+---------+---------+
| id | A_value | B_value |
+-----+---------+---------+
| 92 | 123.123 | 32019 |
| 105 | 9034 | 3281 |
| 999 | 421 | nan |
+-----+---------+---------+
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方法是什么?
我有一个包含许多列的数据框。我正在尝试过滤其中一列(“区域”)并根据“区域”列中的这 4 个区域中的每一个创建一个单独的数据框。然后在这 4 个单独的数据帧中的每一个上运行包含大量计算的大代码块,而不必单独重写大代码块 4 次。
我知道我可以使用 .isin 函数进行列过滤,并为我的 4 个地区(美国、新兴市场、欧洲、亚洲)执行此操作:
US = df[df['Region'].isin('US')]
EM = df[df['Region'].isin('EM')]
Europe = df[df['Region'].isin('Europe')]
Asia = df[df['Region'].isin('Asia')]
Run Code Online (Sandbox Code Playgroud)
然后在 4 个新数据帧上运行我的代码块。但是我会分别执行我的大块计算代码 4 次,这太混乱了。我怎样才能在循环中做到这一点,所以我只需要一次编写我的大代码块?如果除了 for 循环之外,我还可以使用另一个函数来执行此操作,这也很棒。感谢任何帮助 - 尝试学习。
虚拟代码:
df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['cats','dogs','birds','pianos','elephant','dinos'], 'Region' : ['EM', 'US', 'US', 'Europe', 'Asia', 'Asia']})
Run Code Online (Sandbox Code Playgroud) 所以我有这个 DF:
In [130]: dfAbr
Out[130]:
ip ospfArea router_name
0 1.1.1.1 0.0.0.2 Router1-1
1 1.1.1.2 0.0.0.2 Router1-2
140 5.5.5.1 0.0.0.5 Router5-1
141 5.5.5.2 0.0.0.5 Router5-2
Run Code Online (Sandbox Code Playgroud)
我想将其重塑为 2 行数据框,例如:
我一直在玩stack/unstack和pivot 功能,但不能走那么远。
例如,dfAbr1 = pd.DataFrame(dfAbr.set_index('ospfArea').stack()).reset_index()重命名列名会产生以下结果:
In [151]: dfAbr1
Out[151]:
ospfArea level1 level2
0 0.0.0.2 ip 1.1.1.1
1 0.0.0.2 router_name Router1-1
2 0.0.0.2 ip 1.1.1.2
3 0.0.0.2 router_name Router1-2
4 0.0.0.5 ip 5.5.5.1
5 0.0.0.5 router_name Router5-1
6 0.0.0.5 ip 5.5.5.2
7 0.0.0.5 router_name Router5-2
Run Code Online (Sandbox Code Playgroud)
从那里开始,我想要pivot它,就像这样: …