【问题标题】:Group a column and take the value that appears several times in another column in Pandas对一列进行分组并取在 Pandas 的另一列中出现多次的值
【发布时间】:2022-08-17 17:49:07
【问题描述】:

我想知道如何获取在一个列中出现多次的值,该列链接到另一列。 让我用一个例子更好地解释自己: 我有一个包含两列的数据框:\'Provider\' 和 \'PotentialFraud\',在 \'Provider\' 列中,相同的 Provider 代码出现了多次,而在 \'PotentialFraud\' 中它是一个布尔字段。我必须创建另一个数据框,其中在 \'Provider\' 列中每个 Provider 代码仅出现一次,并且在 \'PotentialFraud\' 字段中,如果在第一个带有该代码的 DataFrame 中有更多 True,则显示为 True,否则为 False。

第一个 DataFrame 的示例:

Provider PotentialFraud
First True
Second True
First True
Second False
Third False
Second True

第二个 DataFrame 将是:

Provider PotentialFraud
First True
Second True
Third False

我试着写这段代码:

final_provider_dataset = pd.DataFrame(columns=[\'Provider\', \'PotentialFraud\'])
for provider in provider_test_dataset[\'Provider\'].unique():
    potential_fraud_true = provider_test_dataset[provider_test_dataset[\'Provider\'] == provider] [\'PotentialFraud\'].value_counts()[True]
    potential_fraud_false = provider_test_dataset[provider_test_dataset[\'Provider\'] == provider] [\'PotentialFraud\'].value_counts()[False]
    if potential_fraud_true > potential_fraud_false:
        final_provider_dataset = final_provider_dataset.append({\'Provider\': provider, \'PotentialFraud\': True}, ignore_index=True)
    else:
        final_provider_dataset = final_provider_dataset.append({\'Provider\': provider, \'PotentialFraud\': False}, ignore_index=True)

但是出现了这个错误:

KeyError                                  Traceback (most recent call last)
File ~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\indexes\\base.py:3621, in Index.get_loc(self, key, method, tolerance)
   3620 try:
-> 3621     return self._engine.get_loc(casted_key)
   3622 except KeyError as err:

File ~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\_libs\\index.pyx:136, in pandas._libs.index.IndexEngine.get_loc()

File ~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\_libs\\index.pyx:144, in pandas._libs.index.IndexEngine.get_loc()

File pandas\\_libs\\index_class_helper.pxi:41, in pandas._libs.index.Int64Engine._check_type()

KeyError: True

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
*localdirectory*\\main.ipynb Cella 121 in <cell line: 4>()
      3 final_provider_dataset = pd.DataFrame(columns=[\'Provider\', \'PotentialFraud\'])
      4 for provider in provider_test_dataset[\'Provider\'].unique():
----> 5     potential_fraud_true = provider_test_dataset[provider_test_dataset[\'Provider\'] == provider] [\'PotentialFraud\'].value_counts()[True]
      6     potential_fraud_false = provider_test_dataset[provider_test_dataset[\'Provider\'] == provider] [\'PotentialFraud\'].value_counts()[False]
      7     if potential_fraud_true > potential_fraud_false:
...
   3626     #  InvalidIndexError. Otherwise we fall through and re-raise
   3627     #  the TypeError.
   3628     self._check_indexing_error(key)

KeyError: True

我能做些什么?提前致谢。

    标签: python pandas


    【解决方案1】:

    IIUC 用途:

    df = df.groupby('Provider', as_index=False)['PotentialFraud'].any()
    

    【讨论】:

      猜你喜欢
      • 2020-08-21
      • 2019-12-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 2017-04-01
      • 2022-06-13
      相关资源
      最近更新 更多