Python - 如何组合/连接/连接 pandas 系列变量忽略空变量

标签 python python-3.x pandas

在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。

下面给出了代码片段供您引用:

var1 = output_df['Player'].loc[output_df['Team']=='India'].reset_index(drop=True)
var2 = output_df['Player'].loc[output_df['Team']=='Australia'].reset_index(drop=True)
var3 = output_df['Player'].loc[output_df['Team']=='Algeria'].reset_index(drop=True)

更新

我的数据框中可能有“n”支球队,但我只想要来自选定球队的顶级球员。这就是为什么我在代码中手动输入团队名称的原因。我可能需要表现最好的人、表现第二好的人等等。因此无法使用 join 语句从数据框中的列中获取值。

现在我将拥有 3 个“pandas.core.series.Series”类型的变量

我已经根据另一列“分数”按降序排序了该数据框

我的要求是从每个团队中获取得分最高的球员,并创建一个输出变量,将所有球员姓名与“,”组合起来。

我尝试使用以下命令来获得所需的输出:

Final = var1[0]+','+var2[0]+','+var3[0]

它成功地产生了预期的输出,但假设如果任何变量为空 - 例如,考虑我的数据框没有来自 Algolia 的得分最高的球员,var3 将为空。因此,当我执行上一个命令时,它会出现“越界”错误

有什么方法可以执行前面的命令,或者是否有任何类似的命令必须忽略空变量,但将剩余的变量与中间的分隔符组合在一起?

更新

我在这里得到的逻辑将用于根据单词的词性标签(名词、形容词、动词等)构建句子。 Var1 将用于存储根据某些分数按降序排列的名词。 Var2 将用于存储以与名词相同的顺序排列的形容词等等...

最后,在构建字符串/句子时,我将使用这些变量来连接。例如:顶级表现名词 + 顶级表现形容词 + 顶级表现动词。第二句话将由 2nd-top-performing-noun + 2nd-top-performing-adjective ..... 现在我没有相同的代码片段。它是由团队玩家代码构建的。

希望此更新有助于更清楚地理解问题**

最佳答案

我认为您需要 concatapply 来删除 dropnaNaN :

var1 = pd.Series(list('abcd'))
var2 = pd.Series(list('rftyru'))
var3 = pd.Series(list('de'))

print (pd.concat([var1, var2, var3], axis=1))

     0  1    2
0    a  r    d
1    b  f    e
2    c  t  NaN
3    d  y  NaN
4  NaN  r  NaN
5  NaN  u  NaN

Final = (pd.concat([var1, var2, var3], axis=1)
          .apply(lambda x: ', '.join(x.dropna()), axis=1))
print (Final)

0    a, r, d
1    b, f, e
2       c, t
3       d, y
4          r
5          u
dtype: object

但最好将 groupbysort_valuesGroupBy.head 一起使用,例如 2 玩家。

要过滤团队,请使用boolean indexing:

#a bit changed data from another solution
df = pd.DataFrame([['Tim', 'India', 100],
                   ['Bob', 'Australia', 50],
                   ['John', 'Algeria', 123],
                   ['Sarah', 'Algeria', 456],
                   ['Jane', 'Australia', 9]],
                         columns=["Player", "Team", "Score"])


df1 = df[df['Team'].isin(['Algeria','India','Australia'])]
df1 = df1.sort_values('Score', ascending=False).groupby('Team').head(2)
print (df1)
  Player       Team  Score
3  Sarah    Algeria    456
2   John    Algeria    123
0    Tim      India    100
1    Bob  Australia     50
4   Jane  Australia      9

df1 = (df.sort_values('Score', ascending=False)
        .groupby('Team')['Player']
        .apply(lambda x: ', '.join(x.head(2)))
        .reset_index())
print (df1)

        Team       Player
0    Algeria  Sarah, John
1  Australia    Bob, Jane
2      India          Tim

对于第二个顶级使用GroupBy.nth:

df1 = df.sort_values('Score', ascending=False).groupby('Team', as_index=False).nth(1)
print (df1)
  Player       Team  Score
2   John    Algeria    123
4   Jane  Australia      9

关于Python - 如何组合/连接/连接 pandas 系列变量忽略空变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46342959/

相关文章:

python - Python中模块的条件导入

python - Pandas:向多索引表添加新行不起作用

python - eval() 函数如何改变字典?

python-3.x - 谷歌Colab : API error in opening up Python notebooks?

python - 为什么运行这个 python 脚本会占用我所有的磁盘空间?

python - 具有多索引的 Groupby

python - 为什么只有一行导出到excel?

python - 使用 Sphinx 自定义语法高亮

python - 如何延长图中的回归线?

python - DRF : Validate nested serializer data when creating, 但更新时没有