pandas 根据列表中的元素在 Dataframe 中添加行

mbzjlibv  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(110)

我有以下列表和 Dataframe :

lis = ["Color", "Material", "Handle"]

Code for dataframe:

data = [[1, 'Color', 'Yellow', 'SourceA'],
        [1, 'Material', 'Plastic', 'SourceA'],
       [1, 'Handle', 'Y', 'SourceB'],
       [2, 'Color', 'Blue', 'SourceB'],
       [2, 'Handle', 'N', 'SourceA'],
       [3, 'Color', 'Black', 'SourceA'],
       [3, 'Color', 'Black', 'SourceB'],
       [3, 'Material', 'Steel', 'SourceA']]
  
df_one = pd.DataFrame(data, columns=['Id', 'feature', 'feature_value', 'Source'])
df_one = 

| ID | feature  | feature_value | Source  |
| 1  | Color    | Yellow        | SourceA |
| 1  | Material | Plastic       | SourceA |
| 1  | Handle   | Y             | SourceB |
| 2  | Color    | Blue          | SourceB |
| 2  | Handle   | N             | SourceA |
| 3  | Color    | Black         | SourceA |
| 3  | Color    | Black         | SourceB |
| 3  | Material | Steel         | SourceA |

我需要每个ID都有所有的特点列在"利斯"。ID1有"颜色","材料","处理",但ID2没有"材料"和ID3没有"处理"。我需要我的输出看起来像下面:

| ID | feature  | feature_value | Source  |
| 1  | Color    | Yellow        | SourceA |
| 1  | Material | Plastic       | SourceA |
| 1  | Handle   | Y             | SourceB |
| 2  | Color    | Blue          | SourceB |
| 2  | Handle   | N             | SourceA |
| 2  | Material | null          | UNK     |
| 3  | Color    | Black         | SourceA |
| 3  | Color    | Black         | SourceB |
| 3  | Material | Steel         | SourceA |
| 3  | Handle   | null          | UNK     |

我试着遍历 Dataframe 的行,并为每一行创建一个字典,但是因为ID列不是唯一的,所以我没有唯一的键和值。
任何帮助将不胜感激!

8tntrjer

8tntrjer1#

如果你确信 * 至少 * 有一个IDlis的三个值,那么DataFrame.complete就适合你。

#pip install pyjanitor
import janitor
​
out = df_one.complete("Id", "feature", fill_value={"Source": "UNK"})
​

输出:

df_one.groupby("Id")["feature"].agg(set).eq((lis)).any()
#True

print(out)

   Id   feature feature_value   Source
0   1     Color        Yellow  SourceA
1   1  Material       Plastic  SourceA
2   1    Handle             Y  SourceB
3   2     Color          Blue  SourceB
4   2  Material           NaN      UNK
5   2    Handle             N  SourceA
6   3     Color         Black  SourceA
7   3     Color         Black  SourceB
8   3  Material         Steel  SourceA
9   3    Handle           NaN      UNK

相关问题