回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我是Python新手。我试图了解熊猫群居和应用方法是如何工作的。我发现了<a href="https://www.tutorialspoint.com/python_pandas/python_pandas_groupby.htm" rel="nofollow noreferrer">this</a>个简单的例子,我将其粘贴到下面:</p>
<pre><code>import pandas as pd
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
</code></pre>
<p>数据帧<code>df</code>如下所示:</p>
<pre><code> Team Rank Year Points
0 Riders 1 2014 876
1 Riders 2 2015 789
2 Devils 2 2014 863
3 Devils 3 2015 673
4 Kings 3 2014 741
5 kings 4 2015 812
6 Kings 1 2016 756
7 Kings 1 2017 788
8 Riders 2 2016 694
9 Royals 4 2014 701
10 Royals 1 2015 804
11 Riders 2 2017 690
</code></pre>
<p>到目前为止,还不错。然后我想转换我的数据,以便从每组团队中只保留Points列中的第一个元素。首先检查了<code>df['Points'][0]</code>确实给出了<code>df</code>的第一个<code>Points</code>元素,我尝试了以下方法:</p>
<pre><code>df.groupby('Team').apply(lambda x : x['Points'][0])
</code></pre>
<p>认为<code>x</code>函数的参数<code>lambda</code>是另一个数据帧。但是,python会产生一个错误:</p>
<pre><code>File "pandas/_libs/index.pyx", line 81, in pandas._libs.index.IndexEngine.get_value
File "pandas/_libs/index.pyx", line 89, in pandas._libs.index.IndexEngine.get_value
File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 987, in pandas._libs.hashtable.Int64HashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 993, in pandas._libs.hashtable.Int64HashTable.get_item
KeyError: 0
</code></pre>
<p>这似乎与哈希表有关,但我不明白为什么。然后我认为传递给<code>lambda</code>的可能不是数据帧,所以我运行了以下命令:</p>
<pre><code>df.groupby('Team').apply(lambda x : (type(x), x.shape))
</code></pre>
<p>带输出:</p>
<pre><code>Team
Devils (<class 'pandas.core.frame.DataFrame'>, (2, 4))
Kings (<class 'pandas.core.frame.DataFrame'>, (3, 4))
Riders (<class 'pandas.core.frame.DataFrame'>, (4, 4))
Royals (<class 'pandas.core.frame.DataFrame'>, (2, 4))
kings (<class 'pandas.core.frame.DataFrame'>, (1, 4))
dtype: object
</code></pre>
<p>IIUC表明,<code>lambda</code>的参数确实是一个包含每个团队的<code>df</code>子集的pandas数据帧。你知道吗</p>
<p>我知道我可以通过运行以下命令获得所需的结果:</p>
<pre><code>df.groupby('Team').apply(lambda x : x['Points'].iloc[0])
</code></pre>
<p>我只想从apply函数中理解为什么<code>df['Points'][0]</code>有效而<code>x['Points'][0]</code>无效。谢谢你的阅读!你知道吗</p>