簡體   English   中英

創建一個新列,它是 pandas DataFrame 中行的頻率

[英]Make a new column that's the frequency of a row in a pandas DataFrame

我需要一個新列C ,其中每個值是其他兩列AB中的值一起出現在數據中的頻率。

    A   B   C
0   7   9   2
1   7   2   2
2   1   9   3
3   4   8   1
4   9   1   1
5   6   4   1
6   7   2   2
7   7   9   2
8   1   9   3
9   1   9   3

我嘗試用這樣的值計數制作字典:

import pandas as pd
import numpy as np

df = pd.DataFrame({
   'A': np.random.randint(1, 10, 100),
   'B': np.random.randint(1, 10, 100)
})

mapper = df.value_counts().to_dict()

然后我將每一行轉換為一個元組,並通過 pandas 的 apply function 中的字典將其反饋回來:

df['C'] = df.apply(lambda x: mapper[tuple(x)], axis=1)

該解決方案似乎可能(a)不正確或(b)效率低下,我想知道是否有更好的方法來解決它。

df['C2'] = df.groupby(['A','B'])['B'].transform('count')
df
    A   B   C2
0   7   9   2
1   7   2   2
2   1   9   3
3   4   8   1
4   9   1   1
5   6   4   1
6   7   2   2
7   7   9   2
8   1   9   3
9   1   9   3

用於解決方案的數據

data={'A': {0: 7, 1: 7, 2: 1, 3: 4, 4: 9, 5: 6, 6: 7, 7: 7, 8: 1, 9: 1},
 'B': {0: 9, 1: 2, 2: 9, 3: 8, 4: 1, 5: 4, 6: 2, 7: 9, 8: 9, 9: 9}}
df=pd.DataFrame(data)
df

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM