在顯示任何匹配的值與我的查找值在同一行時遇到了問題,因此,即
我的第一個表:
| some_primary_key | unique_value_1 |
|---|
其他表格:
| some_primary_key | values | |
|---|---|---|
| unique_value_1 | some_value_1 | unique_value_1 | some_value_2 |
| some_value_2 | unique_value_2 | some_value_3 |
| some_value_3 | unique_value_2 | some_value_4 |
| unique_value_3 |
最后我想這樣:
| some_primary_key | values |
|---|---|
| unique_value_1 | some_value_1, some_value_2 | unique_value_2 | some_value_3, some_value_4 |
| some_value_3, some_value_4 | some_value_5, some_value_6 |
| some_value_5, some_value_6 |
我是否應該使用串列理解法遍歷df專案并創建匹配值的串列?有什么想法嗎?
答案是:
這是我的示例解決方案:
import pandas as pd
data = {'some_primary_key': ['unique_value_1',
'unique_value_2'。
'unique_value_3']*2。
'values':['some_value_1', 'some_value_3', 'some_value_5',
'some_value_2'/span>, 'some_value_4'/span>, 'some_value_6'/span>]
}
df = pd.DataFrame(data=資料)
list_of_values = []
for item in df['some_primary_key'] 。
filtered_values = df[df['some_primary_key']==item]
list_of_values.append(','.join(x for x in filtered_values[' values'])
df['values'] = list_of_values
df = df.drop_duplicates()
print(df)
還有沒有其他的、整潔的解決方案? :)
uj5u.com熱心網友回復:
可能的替代方案可以是:
import pandas as pd
data = {
'some_primary_key': ['unique_value_1', 'unique_value_2', 'unique_value_3']*2,
'values': ['some_value_1'/span>, 'some_value_3'/span>, 'some_value_5'/span>, 'some_value_2'/span>, 'some_value_4'/span>, 'some_value_6'/span>]
}
df = pd.DataFrame(data=data)
df = df.groupby(['some_primary_key'])['values'].apply(lambda x: ', '.join(x)).reset_index()
# or
df = df.groupby(['some_primary_key'])['values'].apply(' , '.join).reset_index()
# or
df = df.groupby('some_primary_key')['values'].apply(', '.join) # 將回傳系列資料。
# or
df = df.groupby('some_primary_key')['values'].agg(', '.join) # 將回傳系列資料。
# or
df = df.groupby(['some_primary_key'], as_index = False).agg({' values': ', '.join})
# or
df = df.groupby('some_primary_key').agg({'value': ', '.join}).reset_index()
print(df)
輸出:
code class="hljs language-python"> some_primary_key values
0 unique_value_1 some_value_1, some_value_2
1 unique_value_2 some_value_3, some_value_4
2 unique_value_3 some_value_5, some_value_6
uj5u.com熱心網友回復:
你正在尋找的是groupby。你可以在some_primary_key上分組后,用transform應用任何自定義函式。
你可以這樣嘗試:
concat_func = lambda x。','.join(map(str, x.sort_values(ascending=True).unique())
df['values'] = df.groupby(['some_primary_key']) ['values'].transform(concat_func)
那么,df將為每個some_primary_key有連接的values,這使得重復的values。因此,只需洗掉重復的行:
df = df.drop_duplicates()
輸出:
code class="hljs language-python"> some_primary_key values
0 unique_value_1 some_value_1,some_value_2
1 unique_value_2 some_value_3,some_value_4
2 unique_value_3 some_value_5,some_value_6
PS:
在concat_func中,sort_values()和unique()方法被應用,以便有一個更好的視圖,防止在一行中出現相同的values。否則,如果df是:
some_primary_key values
0 unique_value_1 some_value_1
1 unique_value_1 some_value_1
輸出將是:
some_primary_key values
0 unique_value_1 一些_value_1,一些_value_1
如果這是想要的輸出,只需使用以下concat_func:
concat_func = lambda x。','.join(map(str, x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323178.html
標籤:
