小编RDJ*_*RDJ的帖子

Scala:用于匹配List中的int的循环

Scala新手.我正在迭代一次for循环100次.10次​​我想要满足条件'a'和90次条件'b'.但是我希望10 a随机出现.

我能想到的最好的方法是创建一个10个随机整数的val,然后循环1到100个整数.

例如:

val z = List.fill(10)(100).map(scala.util.Random.nextInt)

z: List[Int] = List(71, 5, 2, 9, 26, 96, 69, 26, 92, 4)
Run Code Online (Sandbox Code Playgroud)

然后像:

for (i <- 1 to 100) {
  whenever i == to a number in z: 'Condition a met: do something'
else {
   'condition b met: do something else'
  }
}
Run Code Online (Sandbox Code Playgroud)

我试着用contains===!,但似乎没有任何工作.我怎么能这样做?

scala

5
推荐指数
1
解决办法
84
查看次数

Pandas:使用tilde运算符通过两个过滤器返回反向数据

我正在使用两个DataFrame列进行过滤isin.目标是返回两个不同的DataFrame:一个满足过滤条件,另一个满足过滤条件.实际上,DataFrame应该是完全相反的.但是,我似乎无法以我认为的方式使用波浪号运算符.

一个可重复的例子:

raw_data = {
    'id': ['s1', 's2', 's1', 's4', 's2', 's5', 's4', 's2'], 
    'car': ['ford', 'bmw', 'ford', 'mazda', 'ford', 'bmw', 'audi', 'bmw']}

df_a = pd.DataFrame(raw_data, columns= ['id', 'car'])

values1 = ['s1', 's2']
values2 = ['bmw', 'ford']
df_a[(df_a['id'].isin(values1)) & (df_a['car'].isin(values2))]
Run Code Online (Sandbox Code Playgroud)

返回此:

    id  car
0   s1  ford
1   s2  bmw
2   s1  ford
4   s2  ford
7   s2  bmw
Run Code Online (Sandbox Code Playgroud)

哪个是对的.但如果尝试使用以下方法来反转:

df_a[~(df_a['id'].isin(values1)) & (df_a['car'].isin(values2))]

我明白了:

    id  car
5   s5  bmw
Run Code Online (Sandbox Code Playgroud)

这不是相反的.我已经尝试在第二个过滤器中添加第二个波形符,但无法使其正常工作.我哪里错了,或者有更好的方法吗?

python pandas

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

pandas groupby .sum 如何返回错误值?

将 a 应用于groupbyDataFrame 时,所得分组值的总和与获取原始 DataFrame 的列总和时的数字不同。这怎么可能?我无法显示我的完整数据,因为它很敏感,而且更烦人的是,我似乎无法重现问题。下面的例子说明了这一点。

假设我有这个数据框df2

    A      B    C   D
0   One    1    3   2
1   Two    NaN  6   4
2   Three  3    NaN 8
3   One    4    17  NaN
4   Two    7    NaN 2
5   Three  12   8   15
Run Code Online (Sandbox Code Playgroud)

总结一下,它会按预期返回:

`df2.sum()`
    A    OneTwoThreeOneTwoThree
    B                        27
    C                        34
    D                        31
    dtype: object
Run Code Online (Sandbox Code Playgroud)

然后使用这个groupby

df3 = df2.groupby(['A'])[['B', 'C', 'D']].sum()

返回这个:

        B   C   D
A           
One     5   20  2
Three   15  8   23
Two     7 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Seaborn和Pandas:如何设置格式为英镑的yticks

我试图用一个'£'和理想的逗号分隔符来格式化一个情节的yticks.目前yticks的代表如下:20000,30000,40000.我的目标是:20,000英镑,30,000英镑,40,000英镑等.

这是一个等效的可重现的例子:

import seaborn as sis
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="tip", data=tips, whis=np.inf)
sns.stripplot(x="day", y="tip", data=tips, jitter=True)
Run Code Online (Sandbox Code Playgroud)

我如何格式化这样的yticks:£12.00,£10.00,£8.00等.

3小时谷歌搜索,并用种种失败后plt.ytick,并ax.set_yticklabels选择我完全失去了.

在此输入图像描述

pandas seaborn

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

Pandas:返回数据框,其中一列的值大于另一列

如果这是重复的道歉,但我似乎无法在pandas docs,SO或google中找到一个有效的例子.

如何返回一列的值大于另一列的值的数据帧?

应该是这样的: df['A'].where(df['A']>df['B'])

但这只返回一个向量.我需要完整的过滤数据帧.

python dataframe pandas

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

Pandas:有效地对列名进行大量修改

如何对数据框列进行大量修改以避免样板代码.

可重复的例子:

data = {'Subject Id': ['1', '2', '3'],
        'First-Name': ['Alex', 'Amy', 'Allen'], 
        'Last, name': ['Anderson', 'Ackerman', 'Ali']}

df = pd.DataFrame(data, columns = ['Subject Id', 'First-Name', 'Last, name'])
Run Code Online (Sandbox Code Playgroud)

df

    Subject Id  First-Name  Last, name
0   1           Alex        Anderson
1   2           Amy         Ackerman
2   3           Allen       Ali
Run Code Online (Sandbox Code Playgroud)

要清理列名,我通常会这样做:

df.columns = [l.lower() for l in df.columns]
df.columns = [s.replace('-', ' ') for s in df.columns]
df.columns = [d.replace(',', ' ') for d in df.columns]
Run Code Online (Sandbox Code Playgroud)

但有时候我需要进行3次以上的修改.有没有办法将这些操作链接在一起或以其他方式更有效地执行此操作?

python pandas

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

Pandas:以重复值为中心

我想旋转一列中具有重复值的数据框,以公开新列中的关联值,如下例所示。从 Pandas 文档中我无法弄清楚如何从此开始......

name   car    model
rob    mazda  626
rob    bmw    328
james  audi   a4
james  VW     golf
tom    audi   a6
tom    ford   focus
Run Code Online (Sandbox Code Playgroud)

对此...

name   car_1  model_1  car_2  model_2
rob    mazda  626      bmw    328
james  audi   a4       VW     golf
tom    audi   a6       ford   focus
Run Code Online (Sandbox Code Playgroud)

python pivot dataframe pandas

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

Pandas:如何将函数应用于不同的列

假设这是我的功能:

def function(x):
    return x.str.lower()
Run Code Online (Sandbox Code Playgroud)

这是我的 DataFrame (df)

   A         B     C       D 
0  1.67430   BAR  0.34380  FOO 
1  2.16323   FOO -2.04643  BAR
2  0.19911   BAR -0.45805  FOO
3  0.91864   BAR -0.00718  BAR
4  1.33683   FOO  0.53429  FOO
5  0.97684   BAR -0.77363  BAR
Run Code Online (Sandbox Code Playgroud)

我想将该函数仅应用于列BD. (将它应用于完整的 DataFrame 不是答案,因为它会在数字列中产生 NaN 值)。

这是我的基本想法: df.apply(function, axis=1)

但我无法理解如何选择不同的列来应用该函数。我已经尝试过按数字位置、名称等进行索引的所有方式。

我花了很多时间来阅读这个。这不是以下任何一项的直接副本:

如何将函数应用于两列 Pandas 数据框

Pandas:如何对多列使用应用函数

Pandas:对不同的列应用不同的功能

Python Pandas:使用“应用”将 1 个函数应用于多列

python pandas

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

Pandas:将日期时间对象分配给时间间隔

我正在尝试创建一个新变量,其中datetime64[ns]对象被分配给 5 分钟的间隔。新的间隔变量应跨越从 00:00 到 23:55 的每 5 分钟时间段。分配的标准是对象的时间是否datetime64[ns]落在相应的 5 分钟间隔内。我的实际数据在 DateTime 变量中有许多日期,但不应考虑这些不同的日期 - 只有时间元素对于分配很重要。

我在下面模拟了这一点。此示例重点关注大约 23:30 到 23:45 的时间段,但它应该举例说明我在 00:00 到 23:55 的所有时间间隔内试图实现的目标。我添加了两个随机日期来说明这些日期不应有任何影响。

DateTime
2009-02-18 23:32:29 - would map to interval 23:30
2009-02-18 23:34:41 - would map to interval 23:30
2009-02-18 23:35:40 - would map to interval 23.35
2009-02-18 23:39:29 - would map to interval 23:35
2009-02-18 23:39:37 - would map to interval 23:35
2009-02-18 23:40:14 - would map to interval 23:40
2009-02-18 23:43:23 - …
Run Code Online (Sandbox Code Playgroud)

python datetime pandas

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

熊猫:返回两个DataFrame变量之间匹配值的计数

这很简单,但我认为SO或Pandas文档中都没有涉及。

数据

两个DataFrame包含有关城市的数据。DataFrame UK包含一个用于英国城市名称的变量。已将其分组,因此没有重复的城市名称。这是该city变量的截断的示例(不是完整的DataFrame):

city
Hamilton
Edinburgh
Bury
...
Run Code Online (Sandbox Code Playgroud)

DataFrame US包含美国城市名称的相应变量。它确实有重复的城市名称,但实际上并没有重复的值,因为有许多城市使用相同的名称。再次,一个截断的示例:

city
Hamilton
Hamilton
Edinburgh
Edinburgh
Edinburgh
Bury
Bury 
...
Run Code Online (Sandbox Code Playgroud)

(注意:变量在我的数据中的长度不同。)

目的

UKDataFrame中创建一个新变量,该变量是每次US城市变量中的城市名称与城市变量中的城市名称匹配时的整数计数UK

下面显示了我要输出的示例。假设有一个英国城市叫汉密尔顿,在美国有2个城市叫汉密尔顿。英国一个名为爱丁堡的城市,在美国有3场比赛。和Bury的2场比赛。

city       count
Hamilton       2
Edinburgh      3
Bury           2
Run Code Online (Sandbox Code Playgroud)

我被困在哪里

如果我这样做

uk['count'] = uk['city'].isin(us['city']).astype(int)
Run Code Online (Sandbox Code Playgroud)

新变量是二进制1或0,表示存在匹配项,位于中间。但是我在努力用Pandas语法返回匹配计数。我已经尝试过添加value_counts唯一性和变体,但是这些没有用。也许我走错了路。

python pandas

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

标签 统计

pandas ×9

python ×8

dataframe ×2

datetime ×1

pivot ×1

scala ×1

seaborn ×1