gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:35:08 27 4
gpt4 key购买 nike

在 .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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com