这将是有用的,所以我知道有多少我必须执行计算的唯一组.谢谢.
假设调用groupby对象dfgroup.
在问题和答案中,用户经常发布DataFrame他们的问题/答案适用的示例:
In []: x
Out[]:
bar foo
0 4 1
1 5 2
2 6 3
Run Code Online (Sandbox Code Playgroud)
能够将它DataFrame放入我的Python解释器中是非常有用的,这样我就可以开始调试问题,或者测试答案.
我怎样才能做到这一点?
我想在lambda函数中使用if ... elif ... else将lambda函数应用于DataFrame列.
df和代码是smth.喜欢:
df=pd.DataFrame({"one":[1,2,3,4,5],"two":[6,7,8,9,10]})
df["one"].apply(lambda x: x*10 if x<2 elif x<4 x**2 else x+10)
Run Code Online (Sandbox Code Playgroud)
显然这种方式不起作用.有没有办法申请,如果.... elif ....其他的lambda?如何使用List Comprehension重新获得相同的结果?
谢谢你的回复.
考虑一个小型MWE,取自另一个问题:
DateTime Data
2017-11-21 18:54:31 1
2017-11-22 02:26:48 2
2017-11-22 10:19:44 3
2017-11-22 15:11:28 6
2017-11-22 23:21:58 7
2017-11-28 14:28:28 28
2017-11-28 14:36:40 0
2017-11-28 14:59:48 1
Run Code Online (Sandbox Code Playgroud)
目标是剪切所有值的上限为1.我的答案使用np.clip,这很好.
np.clip(df.Data, a_min=None, a_max=1)
array([1, 1, 1, 1, 1, 1, 0, 1])
Run Code Online (Sandbox Code Playgroud)
要么,
np.clip(df.Data.values, a_min=None, a_max=1)
array([1, 1, 1, 1, 1, 1, 0, 1])
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的答案.我的问题是关于这两种方法的相对表现.考虑 -
df = pd.concat([df]*1000).reset_index(drop=True)
%timeit np.clip(df.Data, a_min=None, a_max=1)
1000 loops, best of 3: 270 µs per loop
%timeit np.clip(df.Data.values, a_min=None, a_max=1)
10000 loops, best …Run Code Online (Sandbox Code Playgroud) 我的第一个问题:我对pandas(0.12.0-4)中groupby的apply方法的这种行为感到困惑,它似乎将函数TWICE应用于数据帧的第一行.例如:
>>> from pandas import Series, DataFrame
>>> import pandas as pd
>>> df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})
>>> print(df)
class count
0 A 1
1 B 0
2 C 2
Run Code Online (Sandbox Code Playgroud)
我首先检查groupby函数是否正常,看起来没问题:
>>> for group in df.groupby('class', group_keys = True):
>>> print(group)
('A', class count
0 A 1)
('B', class count
1 B 0)
('C', class count
2 C 2)
Run Code Online (Sandbox Code Playgroud)
然后我尝试在groupby对象上使用apply做类似的事情,我得到第一行输出两次:
>>> def checkit(group):
>>> print(group)
>>> df.groupby('class', group_keys = True).apply(checkit)
class count
0 A 1
class count …Run Code Online (Sandbox Code Playgroud) 有一个如下所示的数据框,它有一个不干净的列'id',它应该是数字列
id, name
1, A
2, B
3, C
tt, D
4, E
5, F
de, G
Run Code Online (Sandbox Code Playgroud)
是否有一种简洁的方法来删除行,因为tt和de不是数值
tt,D
de,G
Run Code Online (Sandbox Code Playgroud)
使数据帧干净?
id, name
1, A
2, B
3, C
4, E
5, F
Run Code Online (Sandbox Code Playgroud) 如果我有任意顺序的卡套装列表,如下所示:
suits = ["h", "c", "d", "s"]
Run Code Online (Sandbox Code Playgroud)
我想要返回一个没有的列表 'c'
noclubs = ["h", "d", "s"]
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法来做到这一点?
我在名为train的数据帧中有一个类型为string(object)的列I_DATE,如下所示.
I_DATE
28-03-2012 2:15:00 PM
28-03-2012 2:17:28 PM
28-03-2012 2:50:50 PM
Run Code Online (Sandbox Code Playgroud)
如何将I_DATE从字符串转换为数据时格式并指定输入字符串的格式.我看到了一些答案,但它不适用于AM/PM格式.
另外,如何根据pandas中的日期范围过滤行?
PySpark中的Apache Spark中是否存在等效的Pandas Melt函数,或者至少在Scala中?
我到目前为止在python中运行了一个示例数据集,现在我想将Spark用于整个数据集.
提前致谢.
我怀疑这是微不足道的,但我还没有发现让我根据分层键的值从Pandas数据帧中选择行的咒语.因此,例如,假设我们有以下数据帧:
import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
df = df.set_index(['group1', 'group2'])
Run Code Online (Sandbox Code Playgroud)
看起来像我们期望的那样:

如果df未在group1上编入索引,我可以执行以下操作:
df['group1' == 'a']
Run Code Online (Sandbox Code Playgroud)
但是这个带有索引的数据帧失败了.所以也许我应该把它想象成一个带有分层索引的Pandas系列:
df['a','c']
Run Code Online (Sandbox Code Playgroud)
不.那也失败了.
那么如何选择所有行:
python ×9
pandas ×8
dataframe ×3
group-by ×2
apache-spark ×1
clipboard ×1
datetime ×1
melt ×1
multi-index ×1
numpy ×1
performance ×1
pyspark ×1