从pandas数据框列中提取多个单词到同一列

时间:2019-01-18 11:14:58

标签: python pandas dataframe data-structures split

假设一个数据帧由两列A = {1,2,3} B = {'a b c d','e f g h','i j k l'}组成。对于A = 2,我想将B列中的相应条目更改为'e f h'。 (即,提取第一个,第二个和最后一个单词,不要删除第三个单词,不一样)。

使用df.loc [df ['colA'] = 2,'colB']。str.split()。str [x]提取单个单词很容易,其中x = 0,1和-1 ,但是我很难将三个单词有效地重新组合成一个字符串。下面提供了我能想到的最有效的方法。是否有更好的方法来实现我要完成的任务?谢谢。

y = lambda x : df.loc[df['colA']==2,'colB'].str.split().str[x]
df.loc[df['colA']=2,'colB'] = y(0) + ' ' + y(1) + ' ' + y(-1)

预期和实际结果:

A     B
1  a b c d
2  e f h
3  i j k l

2 个答案:

答案 0 :(得分:0)

如何?

df = pd.DataFrame(data = {'A': [1,2,3], 
                          'B': ['a b c d', 'e f g h', 'i j k l']})

y = lambda x : df.loc[df['A']==2,'B'].str[0:2*x+2] + df.loc[df['A']==2,'B'].str[-1]
df.loc[df1['A']==2,'B'] = y(1)

然后df是通缉犯:

   A        B
0  1  a b c d
1  2    e f h
2  3  i j k l

答案 1 :(得分:0)

您非常接近解决方案,唯一的问题是#include <iostream> #include <string> using namespace std; int main() { int y; cout << "How many people do you want to enter= \n"; cin >> y; string names[10]; int pancakes[10]; for (int i = 0; i <= y-1 ; i++) { cout << "enter name= "; cin >> names[i]; cout << "num of pancakes= "; cin >> pancakes[i]; } int maxEaten = pancakes[0]; int minEaten = pancakes[0]; string maxPer = names[0]; string minPer = names[0]; for (int k = 1; k < y; k++) { if (pancakes[0] < pancakes[k]) { maxEaten = pancakes[k]; maxPer = names[k]; } if (pancakes[0] > pancakes[k]) { minEaten = pancakes[k]; minPer = names[k]; } } cout << maxPer << " ate " << maxEaten << " which is the maximum." << endl; cout << minPer << " ate " << minEaten << " which is the minimum." << endl; system("pause"); } 返回包装在Series对象中的值。您可以通过如下所示从Series中提取值来解决此问题:

str[x]

您还可以通过应用apply函数来实现同样的目的

y = lambda x : df.loc[df['colA']==2,'colB'].str.split().str[x].values[0]
df.loc[df['colA']==2,'colB'] = y(0) + ' ' + y(1) + ' ' + y(-1)